链接方法PHP

php*_*der 0 php methods chaining

<?php
$sth = Framework::blah()->any_key['any_key_2'];
?>
Run Code Online (Sandbox Code Playgroud)

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

Gor*_*don 5

你在做什么Framework::blah()->any_key['any_key_2'];是这样的:

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

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

要么

class Framework {

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

    public static function blah()
    {
        return new self;
    }
}
Run Code Online (Sandbox Code Playgroud)

要么

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){}
}
Run Code Online (Sandbox Code Playgroud)