链接方法PHP

时间:2010-07-31 13:54:42

标签: php methods chaining

<?php
$sth = Framework::blah()->any_key['any_key_2'];
?>

您好,我想在blah()中获取'any_key'和'any_key_2',我是怎么做到的?

2 个答案:

答案 0 :(得分:5)

您使用Framework::blah()->any_key['any_key_2'];做的是:

静态调用blah()类中的方法Framework。方法调用必须返回一个对象,您可以从中以某种方式获取属性any_keyany_key的值必须是数组或实现ArrayAccess的内容。

class Framework
{
    public static function blah()
    {
        return new ArrayObject(
            array('any_key' => array(
                'any_key_2' => 'blablablah')
            ), ArrayObject::ARRAY_AS_PROPS);
    }
}

class Framework {

    public $any_key = array(
        'any_key_2' => 'blahblahblah'
    );

    public static function blah()
    {
        return new self;
    }
}

class Framework
{
    public static function blah()
    {
        $class = new StdClass;
        $class->any_key = new Foo;
        return $class;
    }
}

class Foo implements ArrayAccess
{
    protected $any_key_2 = 'blahblahblah';
    public function offsetGet ($offset){
        return $this->$offset;
    }
    public function offsetSet ($offset, $value){}
    public function offsetUnset ($offset){}
    public function offsetExists ($offset){}
}

答案 1 :(得分:0)

这是不可能的,或者您需要以某种方式将这些作为参数传递给blah

method chaining或实现fluent interface时使用的关键概念是在每个方法中返回对象本身。