【问题标题】:PHP method in class with another method? [duplicate]类中的PHP方法与另一种方法? [复制]
【发布时间】:2017-04-22 12:20:39
【问题描述】:

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

我见过这样的电话:

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

或喜欢

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

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

【问题讨论】:

    标签: php class oop


    【解决方案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()
    

    【讨论】:

    • 您是否有任何教程链接,我可以在其中阅读和了解它们的工作原理以及它们是如何创建的?
    • 我建议这样做可以很好地掌握 php 中的 oo 并且文档非常适合 - php.net/manual/en/language.oop5.php 如果格式不适合您,您可以查看其他一些教程,只需搜索 php oo教程...顺便说一句。对象(类)上下文中的 $this 将返回该对象的实例(在我的示例中为 MailBuilder)
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2016-06-27
      • 1970-01-01
      • 2015-11-06
      • 2011-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-10
      • 1970-01-01
      相关资源
      最近更新 更多