делая var
объект другого класса, вы можете приковать вызовы методов друг с другом.
<?php
class Foo {
public $bar;
public function __construct(Bar $bar) {
$this->bar= $bar;
}
}
class Bar {
private $name;
public function __construct($name) {
$this->name = $name;
}
public function printName() {
echo $this->name;
}
}
$bar = new Bar('Bar');
$bar2 = new Bar('Bar2');
$foo = new Foo($bar);
$foo->bar->printName(); // Will print 'Bar';
$bar2->printName(); // Will print 'Bar2'
Вы можете использовать это для аккуратных вещей, как Dependency Injection
Кроме того, он может сделать код Бетт читаемым и понятным, потому что вы не должны буфера переменных, прежде чем принимать вызовы методов их и может просто вызвать один метод за другим.
Посмотрите на этот пример:
$obj = new MyObject();
$db = $obj->getDb();
$con = $db->getCon();
$stat = $con->getStat();
Что может быть написано, как это с помощью метода построения цепочки:
$obj = new Object();
$stat = $obj->getDB()->getCon()->getStat();
Но это также трудно отлаживать, потому что, если какой-либо из этих способов бросить исключение , вы просто получите номер строки, где находится цепочка, что может быть довольно опасным.
Итак, всегда есть две стороны. Это просто еще один стиль программирования.
Просто убедитесь, что не к цепи слишком долго в одной строке, как вы определенно потерять обзор. Метод
БАД
$obj->meth('1', $arg2, array('arg2'))->method2($whaterver, array('text' => $bla_text))->andSoOn();
ХОРОШО
$obj->meth('1', $arg2, array('arg2'))
->method2($whaterver, array('text' => $bla_text))
->andSoOn();
'$ obj-> варьировали>()' не является полезным на всех из-за бессмысленной. Например, 'var' должен быть объектом с методом method(). То, что вы, скорее всего, ищете, - это http://stackoverflow.com/search?q=method+chaining+php – Gordon