【问题标题】:How to build multi oop functions in PHP5如何在 PHP5 中构建多 oop 函数
【发布时间】:2010-07-21 11:28:31
【问题描述】:

我有一个关于 PHP5 中的 OOP 的问题。我看到越来越多的代码是这样写的:

$object->function()->first(array('str','str','str'))->second(array(1,2,3,4,5));

但我不知道如何创建此方法。我希望有人可以在这里帮助我,:0) 非常感谢。

【问题讨论】:

标签: php oop method-chaining


【解决方案1】:

在您自己的类中链接此类方法的关键是返回一个对象(几乎总是$this),然后将其用作下一个方法调用的对象。

像这样:

class example
{
    public function a_function()
    {
         return $this;
    }

    public function first($some_array)
    {
         // do some stuff with $some_array, then...
         return $this;
    }
    public function second($some_other_array)
    {
         // do some stuff
         return $this;
    }
}

$obj = new example();
$obj->a_function()->first(array('str', 'str', 'str'))->second(array(1, 2, 3, 4, 5));

注意,可以返回$this 以外的对象,并且上面的链接内容实际上只是说$a = $obj->first(...); $b = $a->second(...); 的一种更短的方式,减去设置变量的丑陋,在调用之后您将永远不会再使用。

【讨论】:

  • 仅供参考:此技术用于创建 Fluent 界面 (en.wikipedia.org/wiki/Fluent_interface)。
  • 嗯,不是更多吗?所有的东西都会正常处理吗? :)
  • @NeoNmaN:当然,这取决于你想要做什么。如果您的意图是在单个对象上调用一堆方法,那么是的,这就是它的完成方式。不过,就像我说的那样,除了$this 之外,还可以返回一些东西。如果你这样做了,特别是如果你返回的不是同一类型或与$this 完全无关,那完全是另一回事——它只是我的最后一点灰色代码的简写。回答。
【解决方案2】:
$object->function()->first(array('str','str','str'))->secound(array(1,2,3,4,5));

这不是严格有效的 PHP,但它的意思是...您正在调用 $object 类上的一个方法,该方法本身返回一个对象,在该对象中您正在调用一个名为 first() 的方法,该方法也返回一个您在其中调用名为 second() 的方法的对象。

因此,这不一定只是一个类(尽管它可能是)具有一种方法,而是一系列可能不同类。

类似:

class AnotherClass {
    public function AnotherClassMethod() {
        return 'Hello World';
    }
}

class MyClass {
    public function MyClassMethod() {
        return new AnotherClass();
    }
}

$object = new MyClass();
echo $object->MyClassMethod()->AnotherClassMethod();  // Hello World

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-26
    • 2012-05-09
    • 2014-01-21
    • 2018-10-02
    • 1970-01-01
    • 2012-08-18
    • 2021-07-14
    • 2010-09-06
    相关资源
    最近更新 更多