用另一种方法在类中的PHP方法?

时间:2016-12-07 14:04:27

标签: php class oop

我只需要解释或推动正确的方向如何搜索:某些类方法的子方法(?)是什么?

我见过这样的电话:

$data = Log::Bank($var1, $var2)->start();
$data = Log::Bank($var1, $var2)->refund();

或喜欢

$xml = getData($uri)->toArray();

start()refund()toArray()选项是什么?

2 个答案:

答案 0 :(得分:1)

这些方法返回有其他方法的对象,并且也会调用它们。因此getData将返回一些具有toArray()方法的对象。

您也可以返回对象本身并使用方法链接,即

class MailBuilder {
private $subject;
private$ $body;

public function setSubject($body) {
  $this->body = $body;

  return $this; 
}

public function setBody($body) {
  $this->subject = $subject;

  return $this; 
}
}

然后你可以做类似的事情:

$builder = new MailBuilder();
$builder->setSubject('something')->setBody('something');

所以你可以这样做,因为方法正在返回对象本身,虽然你可以将调用链接到下一个方法。

请记住那样的代码(调用嵌套太深的对象)并不好(它被称为火车残骸):

$object->someMethodReturningObject()->someOtherMethod()->nextObjectMethod()

答案 1 :(得分:1)

这些不是子方法,它们是方法链。在这种情况下,Log::Bank($var1, $var2)将返回一个对象。从该方法返回的对象上有一个start()方法,您可以使用它。因此,当您在末尾添加->start()时,您将在返回的对象上运行它。