【发布时间】:2014-02-23 14:43:15
【问题描述】:
我做了一些研究,发现了这个SO-Post 和这个Php Docs...
现在我的问题是,它不起作用!
我当前的php版本是5.4.12,我追求的这个功能与5.4兼容。我想知道为什么它不起作用?
这就是我所追求的,也是我迄今为止尝试过的东西......
例如,我们有一个类:
class MyClass
{
private $var = "";
public function __construct()
{
// either with or without
// return $this;
}
public static function newObj()
{
return new self;
}
public function setVar($var)
{
$this->var = $var;
}
}
我已经尝试过这些:
$obj = (new MyClass)->setVar("foo");
// or
$obj = MyClass::newObj()->setVar("foo");
但是没有任何工作,当我使用var_dump 获得$obj 值时,它只是null。
编辑
我还尝试在__construct 中放置一个echo,以查看该类是否正在初始化,并且确实如此。
【问题讨论】:
-
你没有从
setVar()返回任何东西 - 你期望$obj有什么价值? -
啊,所以我需要
return $this;。当我把它放在那里时它会起作用,但为什么呢?我希望在类的实例化过程中,创建/返回对象,我只需使用setName访问它,并将更改后的名称的类存储在我的本地$obj变量中。所以,这不是它真正发生的事情。谢谢。 -
在实例化期间,该对象被返回,但您随后获取并立即使用它调用
setVar()。对$obj的赋值只有在=的右侧被完全评估后才会发生,在这种情况下,评估的结果是setVar()的结果。 -
在 setter 方法中返回
$this并在连接语句中将其分配给保存整个实例的变量是晦涩的代码。很可能会在下一个维护版本中中断...