2013-07-24 41 views
1

所以是的,我想知道,如果你能做到這一點..PHP OOP檢查一個類是否返回true或false?

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

但爲什麼不能在一個類這樣做呢?我的意思是我使用構造函數返回布爾值?爲什麼它不起作用?

+0

http://php.net/manual/en/language.references.return.php覆蓋了本 – EvilEpidemic

+0

'的var_dump(新平());'會告訴你到底是什麼回來了,但OOP正確的方法是'$ ping = new Ping(); $ ping-> ping();''作爲新的Ping();'創建一個ping類的實例,而不僅僅是返回true或false。 – We0

回答

5

由於構造函數用於實例化類,和你所得到returned是實例本身....雖然看新的功能在PHP 5.5

編輯

我還以爲我會讀一些關於解引用(類似於數組語法)從對象的構造函數在PHP 5.5中實現,但目前無法找到它的任何引用

+0

你的意思是PHP 5.4:增加了實例化的類成員訪問,例如(new Foo) - > bar()'? – bitWorking

+0

這是一個@redreggae--不完全是構造函數的返回值,但應該可用於實現OP所要求的內容 - 我正在通過5.5更改日誌進行檢查,但無法找到它 –

3

我不認爲PHP關心在構造函數的返回語句。它應該始終返回創建的對象(Ping的實例)。由於Ping的實例不爲空,因此if(new Ping())的計算結果爲true,並回顯'1'。

如果ping真的只需一個電話,爲什麼要使用對象?你可以在某種類型的靜態庫(例如NetUtils)中靜態地定義它。如果ping更復雜,並且您認爲它適合面向對象的模型,則分兩步執行ping。

Ping pingObj = new Ping(); 
pingObj->ping(); 
+0

夠公平的。我只是試圖讓我的代碼在這種情況下更加清潔,而不使用任何這樣的功能。但是在PHP 5.4中可以做些什麼? –

+0

我其實不確定。 @Mark似乎知道這是PHP 5.5中的一項新功能。祝你好運 – Samuel

+0

目前還沒有發佈的PHP版本允許你重寫構造函數的返回值。無論你做什麼,你都會得到新的對象實例。 – 2013-07-24 11:30:30

1

若y你不要直接調用構造函數,它總會返回一個對象。

,你可以這樣做:

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

的代碼第二行返回什麼寫在你的構造函數的return。在你的情況下,它應該返回false

相關問題