在阅读本文时:http: //propelorm.org/我注意到他们正在使用 -> 在静态对象上签名并使用它的几种不同方法作为“单线”。
或者静态对象是否返回一个从方法中调用的实例?
我想了解更多关于此的情况。这叫什么,它真的适用于静态对象吗?
我注意到他们正在使用 -> 在静态对象上签名
静态对象是指静态方法,您所指的代码是这样的:
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
正如其他人在评论中提到的那样,静态函数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();
这通常称为方法链接。静态方法调用返回一个实例化对象,针对该对象调用另一个方法。这种构造通常是这样实现的:
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 上的设置器返回$this
。