我想返回一个类的当前对象。由于$ this变量引用该类的当前对象,但当我返回此变量时,我得到一个错误。
这是我的代码
class Test{
$name;
public static function getobj($n){
$this->name; return $this;
}
}
$obj= Test::getobj("doc");
答案 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;
}
}