看看下面的代码,我看到构造函数返回了一个值。我以为构造函数只返回对象。谁能告诉我我错过了什么?
public function __construct($username = null, $password = null){
$urlLogin = "{$this->apiHost}/login/$username";
$postData = sprintf("api_type=json&user=%s&passwd=%s",
$username,
$password);
$response = $this->runCurl($urlLogin, $postData);
if (count($response->json->errors) > 0){
return "login error";
} else {
$this->modHash = $response->json->data->modhash;
$this->session = $response->json->data->cookie;
return $this->modHash;
}
}
发布于 2012-08-10 22:58:18
确实,你是对的。对构造函数的返回值不能做任何事情(除了使用它创建的对象)。
所以不,你没有遗漏任何东西,是编写代码的开发人员遗漏了。
如果直接调用函数,则在技术上可以使用构造函数的返回值
$obj->__construct();
这将允许您使用构造函数的返回值。然而,这是非常不常见的,也不推荐这样做。
发布于 2012-08-10 22:58:33
构造函数不返回任何内容,但您可以从中返回(由于某种原因,在某个点停止方法执行,但可以创建对象)。
发布于 2012-08-10 23:25:28
与其他语言不同,在PHP中可以显式调用构造函数。这只是另一个函数。看起来原始作者首先决定将一些可能失败的代码放在构造函数中,然后意识到他需要一种在失败后重新运行初始化的方法。
$result = $user->__construct($username, $password)
实际上是有效的,并且你确实得到了返回值。这显然是一种丑陋的做事方式。
在我看来,让代码在构造函数中触发副作用并不是一种好的做法。我会把代码放在一个单独的函数中,它的名字清楚地说明了它的作用。
https://stackoverflow.com/questions/11904255
复制相似问题