2011-09-05 63 views
0
<?php 

class Base{ 
    protected static $somevar = false; 
    public static function changeSomeVar(){ 
    static::$somevar = true; 
    } 

    public static function checkVar(){ 
    var_dump(static::$somevar); 
    } 
} 

class Child1 extends Base{ 
    public static function setup(){ 
    static::changeSomeVar(); 
    } 
} 

class Child2 extends Base{ 

} 

Child1::setup(); 
Child1::checkVar(); // true 
Child2::checkVar(); // still true 

?> 

有沒有辦法有Child1$somevar不同Child2$somevarPHP 5.3晚靜態綁定問題

(我知道你可以手動在每個子類中寫protected static $somevar = false;,但這是有些違反直覺..)

+0

「有沒有辦法讓Child1的$ somevar與Child2的$ somevar不同?」 ---這就是爲什麼開發對象。 – zerkms

回答

2

如果你想有一個子類有一個單獨的類級(靜態)變量,你將需要重新-declare變量。所以你需要在子類中使用protected static $somevar = false;

當我考慮其他語言的類結構時,需要這樣做是非常直觀的。

+0

我在這個類中有大量的靜態變量,它們記錄了很多事情,並且它們對於每個子類都是不同的......這將使得創建子類變得非常麻煩。是否沒有其他方式隱藏那個? – Pwnna

+0

@ultimatebuster:你爲什麼不創建對象?對象有分開的狀態 – zerkms

+0

下面是這樣做的:我有一個基類,提供了很多功能。子類從基類擴展並提供一些對象變量,但每個子類都需要跟蹤它所生成的對象,因此是一個大問題。 – Pwnna