请解释以下声明的执行流程
$this->setPageID()
->paginate()
->sendCacheHeaders();
以下代码
protected function main()
{
$this->setPageID()
->paginate()
->sendCacheHeaders();
}
public function setPageID()
{
$this->pageID = (int)$this->Router->getRealPageID();
return $this;
}
protected function paginate()
{
d('paginating with $this->pagerPath: ' . $this->pagerPath);
$Paginator = Paginator::factory($this->Registry);
$Paginator->paginate($this->Cursor, $this->PER_PAGE,
array('currentPage' => $this->pageID,
'path' => '{_WEB_ROOT_}/' . $this->pagerPath));
$this->pagerLinks = $Paginator->getLinks();
return $this;
}
protected function sendCacheHeaders()
{
return $this;
}
这种方法执行的流程是什么?,这些方法有没有数据传输/通信?
答案 0 :(得分:1)
我称之为链接。基本上,您的函数是类的一部分,该类具有实例($class = new class()
)。
您的函数正在返回该实例。虽然这本身并不是最佳实践,但它确实意味着您可以将呼叫连接起来。
$this->setPageID() ->paginate() ->sendCacheHeaders();
注意每个函数如何返回$this
。所以它与编写
$this->setPageID();
$this->paginate();
$this->sendCacheHeaders();
他们没有明确地相互沟通。它们都属于同一个类实例,因此可以访问属于该类(或任何父类)的任何变量。因此,当paginate()
设置$this->pagerLinks
时,该类中的任何函数都可以访问该值。
答案 1 :(得分:0)
$this
->setPageID() // sets class variable $pageID from Router class. Returns current class.
->paginate() // Setup of Paginator class, assigns links to $pagerLinks. Returns current class
->sendCacheHeaders(); // does nothing. Returns current class
因为每个函数都返回$this
所以可以链接方法调用。如果不返回$this
,您的通话将如下所示:
$this->setPageID();
$this->paginate();
$this->sendCacheHeaders();