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;
        }
    }

}

したがって、基本的には機能しません。私の Web サイトは、'2' の代わりに '1' をエコーし​​ます。原因は '2' でfalseなければなりませんreturn

true基本的には、またはを返すかどうかを確認したいfalse

たとえば、ブール変数はそれを行うことができます:

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 のインスタンスは null ではないため、if(new Ping())評価されtrueて '1' がエコーされます。

ping が実際には 1 回の呼び出しである場合、オブジェクトを使用する理由は何ですか? これは、ある種の静的ライブラリ (NetUtils など) で静的に定義できます。ping がより複雑で、それがオブジェクト指向モデルに適合すると思われる場合は、ping を 2 つのステップで実行します。

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

コンストラクト関数を直接呼び出さない場合、常にオブジェクトが返されます。

しかし、あなたはできる:

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

コードの 2 行目は、コンストラクター関数の に書かれている内容を返しますreturn。あなたの場合、それは返されるはずfalseです。

于 2013-07-24T11:29:13.153 に答える