所以是的,我想知道你是否可以做到这一点..
class Ping
{
function __construct()
{
return self::ping();
}
private static function ping()
{
if ((1 - 1) == 0)
{
return false;
}
else
{
return true;
}
}
}
用法是:
Class ServerHandler
{
public function check()
{
if (new Ping())
{
ECHO 1;
}
else
{
echo 2;
}
}
}
所以基本上,它不起作用。我的网站回显“1”而不是“2”因为false
必须return
'2'。
基本上,我想检查它是否会返回true
或false
。
例如,布尔变量可以这样做:
if (variable)
{
then...
}
但为什么班级不能这样做?我的意思是我使用构造函数返回布尔值?为什么不起作用?
答案 0 :(得分:5)
因为构造函数用于实例化类,所以你得到的是returned
实例本身......虽然看看PHP 5.5中的新功能
修改强>
我以为我从PHP 5.5中实现的对象构造函数中读到了一些关于解除引用(类似于数组解除引用)的内容,但目前找不到对它的任何引用
答案 1 :(得分:3)
我认为PHP不关心构造函数中的return语句。它应该始终返回创建的对象(Ping的实例)。由于Ping的实例不为空,if(new Ping())
的计算结果为true
,并且回显“1”。
如果ping实际上只是一个调用,为什么要使用对象?您可以在某种静态库中静态定义(例如NetUtils)。如果ping更复杂并且您认为它适合面向对象的模型,则分两步执行ping。
Ping pingObj = new Ping();
pingObj->ping();
答案 2 :(得分:1)
如果不直接调用构造函数,它将始终返回一个对象。
但是,你可以这样做:
$ob = new Ping();
$ob->__construct();
第二行代码将返回构造函数return
中的内容。在您的情况下,它应该返回false
。