使用 - >在静态对象上

时间:2013-10-07 19:34:57

标签: php class oop methods static

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

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

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

3 个答案:

答案 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