2012-05-25 106 views
0

我在PHP.net中遇到一個關於static關鍵字的問題, 在這個Link,PHP.net解釋關於靜態關鍵字我確實理解他們所說的,但我沒有「像其他任何PHP靜態變量一樣」成功獲得一個句子。 我只是沒有得到它,如果有人可以幫助我的代碼示例,mabye的解釋會很好。PHP,OOP,Static

+0

謝謝Guy的我現在正在閱讀。 – Blanktext

回答

3

當說「像任何其他靜態變量」手冊引用一個函數內的靜態變量。在典型的例子是,保持內部計數器功能:

function foo() { 
    static $counter = 0; // static variable 
    return ++$counter; 
} 

這樣的和靜態的類屬性,靜態變量會對您可以初始化它們表達的限制。

function foo() { 
    static $counter = getInitialValue(); // ERROR: not possible! 
    return ++$counter; 
} 

如果你需要做這樣的事情,通常的解決辦法是

function foo() { 
    static $counter; // not initialized explicitly, same as = null 
    if ($counter === null) { // three equals! 
     $counter = getInitialValue(); 
    } 
    return ++$counter; 
} 
+0

謝謝你的回答我明白了,如果你能解釋發生了什麼事情,如果你使用兩個等於,我知道兩到三之間的差異,但你可以在這種情況下解釋差異。 – Blanktext

+0

@Blanktext:在這種情況下沒有特別的區別。我只是想避免'$ counter'被初始化爲例如'0',我們不想每次重置它。 – Jon

+0

非常感謝Jon,我現在明白了,祝你有個愉快的一天。 – Blanktext

1

基本上,你可以這樣做:

class Foo 
{ 
    public static $my_static = 'foo'; 

    public function staticValue() { 
     return self::$my_static; 
    } 
} 

其中$my_static被初始化爲與字符串值foo。但你不能做的:

class Foo 
{ 
    public static $my_static = substr('food',0,3); 

    public function staticValue() { 
     return self::$my_static; 
    } 
} 

,並期望$my_static包含函數調用substr的結果;直接將一個函數的返回值分配給一個靜態變量是非法操作。同樣,您不能這樣做:

class Foo 
{ 
    public static $my_static = 'foo'; 
    public static $my_static_2 = $my_static; 

    public function staticValue() { 
     return self::$my_static; 
    } 
} 

因爲您可能無法通過指向另一個變量來初始化靜態變量。