在阅读本文时:http://propelorm.org/我注意到他们正在使用 - >在静态对象上签名并使用它的几种不同方法作为“单行”。
或者静态对象是否返回了从方法中调用的实例?
我想了解更多有关此事的情况。这叫做什么,它真的适用于静态对象吗?
答案 0 :(得分:1)
我注意到他们正在使用 - >在静态对象上签名
通过静态对象,你的意思是说静态方法,你所指的代码是:
classBookQuery::create()->findPK(123);
他们没有在静态方法上使用->
。他们在静态方法返回的对象上使用->
。
您可以自己尝试一下:
class AClass
{
public static function aMethod()
{
return new BClass();
}
}
class BClass
{
public function bMethod($int)
{
echo $int;
}
}
AClass::aMethod()->bMethod(123); // output: 123
答案 1 :(得分:1)
正如其他人在评论中提到的那样,静态函数BookQuery::create()
只返回另一个对象。
"箭头"对返回的对象进行操作。
示例:
class Car {
public function beep() {
echo 'BEEP';
}
}
class CarProvider {
public static function get() {
return new Car();
}
}
// outputs 'BEEP';
CarProvider::get()->beep();
// the same as this
$car = CarProvider::get();
$car->beep();
答案 2 :(得分:0)
这通常被称为方法链。静态方法调用返回一个实例化对象,调用另一个方法。这种结构通常是这样实现的:
class myobject_factory {
public static function get_object () {
return new myobject;
}
}
class myobject {
protected $some_property;
public function set_some_property($value) {
$this->some_property = $value;
return $this;
}
public function get_some_propert() {
return $this->some_property;
}
}
$property = myobject_factory::get_object()->set_some_property('foobar')->get_some_property();
这显然是一个简单的例子,但您可以看到如何启用链接,因为myobject上的setter返回$this
。