PHP OOP:方法链接

Isi*_*sis 4 php oop method-chaining

我有以下代码,

<?php
class Templater
{
    static $params = array();

    public static function assign($name, $value)
    {
        self::$params[] = array($name => $value);
    }

    public static function draw()
    {
        self::$params;
    }
}


 $test = Templater::assign('key', 'value');
 $test = Templater::draw();
 print_r($test);
Run Code Online (Sandbox Code Playgroud)

如何更改此脚本以便我可以使用它?

$test = Templater::assign('key', 'value')->assign('key2', 'value2')->draw();
print_r($test);
Run Code Online (Sandbox Code Playgroud)

Gor*_*don 7

您不能将方法链接与静态方法一起使用,因为您无法返回类级别范围(return self不会这样做).将您的方法更改为常规方法以及return $this要允许链接的每种方法.

请注意,您不应该使用T_PAAMAYIM_NEKUDOTAYIM访问实例方法,因为它会引发E_STRICT通知.使用T_OBJECT_OPERATOR调用实例方法.

另见:


Art*_*cto 6

您不应该使用静态成员:

class Templater
{
    private $params = array();

    public function assign($name, $value)
    {
        $this->$params[$name] = $value;
        return $this;
    }

    public function draw()
    {
        //not really sure what you want here
    }
}

$test = new Templater()->assign('key', 'value')->assign('key2', 'value2')->draw();
Run Code Online (Sandbox Code Playgroud)