0

在阅读本文时:http: //propelorm.org/我注意到他们正在使用 -> 在静态对象上签名并使用它的几种不同方法作为“单线”。

或者静态对象是否返回一个从方法中调用的实例?

我想了解更多关于此的情况。这叫什么,它真的适用于静态对象吗?

4

3 回答 3

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
于 2013-10-07T19:42:49.007 回答
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();
于 2013-10-07T19:43:20.620 回答
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 上的设置器返回$this

于 2013-10-07T19:46:56.497 回答