これを読んでいる間: http://propelorm.org/彼らが使用していることに気付きました -> 静的オブジェクトに署名し、「ワンライナー」としていくつかの異なるメソッドを使用しています。
または、静的オブジェクトは、メソッドから呼び出されているインスタンスを返しますか?
これについてもっと読みたいと思います。これは何と呼ばれ、実際に静的オブジェクトで機能しますか?
他の人がコメントで述べたように、静的関数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();
彼らが使用していることに気付きました -> 静的オブジェクトに署名します
静的オブジェクトとは、静的メソッドを意味し、参照しているコードは次のとおりです。
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
これは、多くの場合、メソッド チェーンとして知られています。静的メソッド呼び出しは、別のメソッドが呼び出されるインスタンス化されたオブジェクトを返しています。この種の構成は、多くの場合、次のように実現されます。
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
。