如何在PHP5中构建多oop函数

时间:2010-07-21 11:28:32

标签: php oop method-chaining

我对PHP5中的OOP有疑问。我看到越来越多的代码写得像这样:

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

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

2 个答案:

答案 0 :(得分:8)

在您自己的类中链接类似方法的关键是返回一个对象(几乎总是$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(...);的一种较短的方式,减去设置变量的丑陋,你永远不会再使用电话结束后。

答案 1 :(得分:0)

$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