2012-09-18 76 views
0

讓說我有類似下面的類:Static關鍵字的使用PHP

class MyClass { 
    public function __construct($str) { 
    // do some stuff including: 
    $str = self::getIP($str); 
    } 

    private static function getIP($str) { 
    return (bool) ip2long($str) ? $str : gethostbyname($str); 
    } 

    // other NON static functions .... 
} 

在上述情況下什麼是具有getIP靜態VS簡單的優勢/劣勢:

private function getIP($str) { 
    return (bool) ip2long($str) ? $str : gethostbyname($str); 
} 

,並呼籲構造函數中的$this->getIP();(或任何其他方法)

上下文:我通常會在沒有static關鍵字的情況下執行此操作,但最近我遇到過這種情況。只是想知道當你絕對不會使用它時,是否有使用靜態的優勢。

+0

如果你想從你的類的另一個靜態方法調用'getIP',你會怎麼做? – nullpotent

回答

1

在這種特殊情況下,沒有優勢或劣勢。但是,其他靜態方法可能會使用靜態方法(可能有些方法是public static)。你確定它沒有被另一個靜態方法調用嗎?

技術上有上$this不再信任可以是靜態的,只要它符合其接口的任何方法(例如,如果父類的方法依賴於$this但孩子的方法不對,孩子的方法不應該是靜態的)。

+0

是的,這正是我所理解的。只是想知道當你絕對不會使用'$ this'時是否有使用靜態的優勢。 – Lizard

+0

@Lizard的好處是你不需要創建對象的實例(即你永遠不需要使用'new'關鍵字來使用該方法)。 –

+0

也許有性能提升?我會研究。 – nullpotent

2

在這種特殊情況下,我不確定。我通常使用靜態方法,因爲:

  • 它在,我要訪問從幾個對象(有點像一個全球性的)
  • 我不希望有創建的實例的靜態變量存儲數據對象每次我調用該方法 - 尤其是如果它主要是從外部調用的。

例如,我通常創建一個App對象,它有很多輔助方法。其中之一是fetch_db。每次我想連接到數據庫時,我只需撥打App::fetch_db()即可。