2012-07-14 164 views
2

我不確定我是否失去它或什麼。我最近在需要休息之後跳回到PHP中,我試圖做一些我一直能夠做的事情:調用公共類方法而不實例化類。例如:實例化類方法而不實例化PHP中的類不再可能?

class Utils 
    { 
    public function getTime() 
    { 
     return time(); 
    } 
    } 

    $time = Utils::getTime(); 
    echo $time; 

我以前做這一切的時候(大約兩三年前),但跳躍到PHP 5.3,我成立了一個新的沙箱環境之後,我不斷收到

Fatal error: Call to undefined function getTime() in /mnt/richard/index.php on line 24 

我在這裏錯過了一些愚蠢的東西嗎?或者是在沒有類實例化的情況下使用公共類方法,這是PHP中現在不推薦使用的特性?哦,時間如何變化......

我的總體目標是能夠創建屬於一組類的方法,這些方法可以在其他方法和類中的全局範圍內調用。任何幫助都感激不盡。謝謝。

+0

你希望能夠調用也從類實例化對象的方法(如'$ foo->的getTime();')或者你只是想使用該類作爲某種名稱空間? – 2012-07-14 05:55:10

+0

此代碼適用於我,複製和粘貼。 – Ohgodwhy 2012-07-14 05:55:37

+0

@Ohgodwhy:'error_reporting(E_ALL);'。這應該給你至少一些警告。 – 2012-07-14 05:56:55

回答

5

即使PHP允許您這樣做,您也不應該將實例方法作爲類上的靜態方法調用。當調用時:

Utils::getTime(); 

您正在調用靜態上下文中的實例方法。你應該定義getTime這樣,而不是:

class Utils 
{ 
    public static function getTime() 
    { 
     // You can't use $this in here. This is a static function. No instance exists. 
     return time(); 
    } 
}