【问题标题】:PHP, return class as objectPHP,将类作为对象返回
【发布时间】:2013-01-21 09:15:33
【问题描述】:

我正在测试像js一样写PHP的方式,不知道这是否可行。

如果说我在 C 类中有 A、B 函数。

Class C{
   function A(){

   }
   function B(){

   }
}
$D = new C;

$D->A()->B(); // <- Is this possible and how??

在Js中,我们可以简单的写成like D.A().B();

我在function A() 中尝试了return $this,没有用。

非常感谢您的建议。

【问题讨论】:

    标签: php class function


    【解决方案1】:

    您正在寻找的是所谓的流畅界面。您可以通过让您的类方法返回自己来实现它:

    Class C{
       function A(){
            return $this;
       }
       function B(){
            return $this;
       }
    }
    

    【讨论】:

      【解决方案2】:

      在方法A() 内部返回$this 实际上是要走的路。 请向我们展示据称不起作用的代码(该代码中可能存在另一个错误)。

      【讨论】:

      • 非常感谢!,我发现我写错了...我不好发布这个问题..
      【解决方案3】:

      其实很简单,你有一系列的 mutator 方法,它们都返回原始(或其他)对象,这样你就可以继续调用函数。

      <?php
      class fakeString
      {
          private $str;
          function __construct()
          {
              $this->str = "";
          }
      
          function addA()
          {
              $this->str .= "a";
              return $this;
          }
      
          function addB()
          {
              $this->str .= "b";
              return $this;
          }
      
          function getStr()
          {
              return $this->str;
          }
      }
      
      
      $a = new fakeString();
      
      
      echo $a->addA()->addB()->getStr();
      

      这会输出“ab”

      在函数内部返回$this 允许您使用相同的对象调用另一个函数,就像jQuery 所做的那样。

      【讨论】:

        【解决方案4】:

        我试过了,效果很好

        <?php
        
        class C
        {
          public function a() { return $this; }
          public function b(){ }
        }
        
        $c = new C();
        $c->a()->b();
        ?>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-08-26
          • 2021-08-09
          • 1970-01-01
          • 2012-07-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多