请解释下面的PHP OOPS代码执行

时间:2014-12-11 13:44:42

标签: php

请解释以下声明的执行流程

$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;
    }

这种方法执行的流程是什么?,这些方法有没有数据传输/通信?

2 个答案:

答案 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();