Цепочка PHP-методов - PullRequest
       11

Цепочка PHP-методов

2 голосов
/ 22 июня 2011

Так что мне было интересно, есть ли способ цепочки методов, когда начальный метод является статической функцией.Вот что я имею в виду:

    class foo
    {
        public static function a()
        {
            $foo = new foo;
            return $foo->bar(); 
        }

        public function bar()
        {
            return $this;
        }

        public function b()
        {
            return 1;
        }
    }

    print foo::a()->b();

РЕДАКТИРОВАТЬ print foo::a()->b(); не print foo:a()->b();

Ответы [ 3 ]

1 голос
/ 22 июня 2011

Статические методы или другие методы, при условии, что метод возвращает объект либо self, либо какой-либо другой, методы могут быть объединены в цепочку тем же методом, который вы пытаетесь.

0 голосов
/ 22 июня 2011

Только своего рода ответ, и несколько своеобразный:
Но я бы посоветовал, чтобы ваш объект сопровождался заводской процедурой вместо:

 class foo { .... }

 function foo() { return new foo; }

Это может устранить некоторую путаницу для вас. И даже выглядит немного лучше, избегая сочетания статических и объектных вызовов методов:

 foo()->bar()->b();

Это в основном экстернализует статическую функцию. А ваш объект реализует только цепочечные методы, которые возвращают $ this или фактические результаты.

0 голосов
/ 22 июня 2011

эта строка

print foo:a();

должна быть

print foo::a();

, и вы не сможете вернуть $this в статическом методе, для которого необходимо сначала создать экземпляр:

$foo = new Foo();
print $foo->a()->b();
...