通过静态方法返回当前对象

时间:2014-08-01 11:12:15

标签: php

我想返回一个类的当前对象。由于$ this变量引用该类的当前对象,但当我返回此变量时,我得到一个错误。

这是我的代码

class Test{
    $name;
    public static function getobj($n){ 
        $this->name; return $this; 
    }
}
$obj= Test::getobj("doc");

2 个答案:

答案 0 :(得分:4)

你不能在静态方法中使用$this,所以你必须创建一个类的实例然后返回:

class Test
{
    public $name;

    public static function getobj($n)
    {
        $o = new self;
        $o->name = $n;

        return $o;
    }
}

$obj = Test::getobj("doc"); // $obj->name == "doc"

答案 1 :(得分:1)

我担心你不能这样做。静态方法存在,没有类的实例。您可以调用静态方法,而根本不存在任何实例。没有$this,因为没有实例。如果你想要一个,那么你需要创建一个:

$obj = new Test();

你可能想要做的是这样的事情:

class Test
{
    private $name;

    public function __construct($name)
    {
        $this->name = $name;
    }
}

现在您可以按如下方式创建类的实例:

$obj = new Test('doc');

有些评论指的是名为 Singleton模式的内容。如果您知道自己只想拥有一个类的实例,就可以使用它。它的工作原理是将该实例存储在类的静态变量中:

class A()
{
    /**
     * The instance itself
     * @var A
     */
    private static $instance;

    /**
     * Constructor. Private so nobody outside the class can call it.
     */
    private function __construct() { };

    /**
     * Returns the instance of the class.
     * @return A
     */
    public static function getInstance()
    {
        // Create it if it doesn't exist.
        if (!self::$instance) {
            self::$instance = new A();
        }
        return self::$instance;
    }
}