1

所以是的,我想知道你是否可以这样做..

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”。

基本上,我想检查它是否返回truefalse.

例如,一个布尔变量可以做到这一点:

if (variable) 
{
    then...
}

但是为什么一个类不能这样做呢?我的意思是我使用构造函数返回布尔值?为什么它不起作用?

4

3 回答 3

5

因为构造函数用于实例化类,而你得到returned的是实例本身....虽然看看 PHP 5.5 中的新特性

编辑

我以为我从 PHP 5.5 中实现的对象构造函数中读到了一些关于解引用(类似于数组解引用)的内容,但目前找不到对它的任何引用

于 2013-07-24T11:23:15.563 回答
3

我不认为 PHP 关心你的构造函数中的 return 语句。它应该始终返回创建的对象(Ping 的实例)。由于 Ping 的实例不为空,因此if(new Ping())计算结果为true并回显“1”。

如果 ping 真的只是一个调用,为什么要使用对象?您可以在某种静态库(例如 NetUtils)中静态定义它。如果 ping 更复杂,并且您认为它适合面向对象的模型,则分两步执行 ping。

Ping pingObj = new Ping();
pingObj->ping();
于 2013-07-24T11:22:32.387 回答
1

如果不直接调用构造函数,它总是会返回一个对象。

但是,你可以这样做:

$ob = new Ping();
$ob->__construct();

第二行代码将返回构造函数中写入的内容return。在您的情况下,它应该返回false.

于 2013-07-24T11:29:13.153 回答