2011-02-23 127 views
0

我有一個具有幾個獨立類的主類,我想將它們鏈接在一起,以便共享在主類中定義的變量。問題是隻有第一個slave類可以讀取$ x變量,每個後續的slave類(我有20個)顯示$ x爲空白。例如:php - 擴展類問題

class Master { 
    var $x; 
    function initialize{) { 
     $this->x = 'y'; 
    } 
} 

class Slave1 extends Master { 
    function process(){ 
     echo $this->x; 
    } 
} 
class Slave2 extends Master { 
    function process(){ 
     echo $this->x; 
    } 
} 

我在這裏做錯了什麼嗎?之前,所以我不知道我在做什麼:)

+1

你能顯示調用代碼嗎?你是否在每個實例上運行' - > initialize()'? – ircmaxell 2011-02-23 16:50:11

+1

其使用訪問修飾符而不是使用var的良好習慣 – Gaurav 2011-02-23 16:51:54

+2

如果您想要進程回顯'y',則需要將__construct添加到主類。或者手動初始化 – JohnP 2011-02-23 16:54:07

回答

3
class Master { 
    var $x; // should use protected or public 
    function __construct() { 
     $this->initialize(); 
    } 

    function initialize{) { 
     $this->x = 'y'; 
    } 
} 

class Slave1 extends Master { 
    function process(){ 
     echo $this->x; 
    } 
} 
class Slave2 extends Master { 
    function process(){ 
     echo $this->x; 
    } 
} 
1

爲了完整起見,這裏是用可見性修飾符(private,protected和公衆)拉夫的回答副本我從來沒有使用擴展類。

class Master { 
    protected $x; 
    public function __constructor() { 
     $this->x = 'y'; 
    } 
} 

class Slave1 extends Master { 
    public function process() { 
     // do stuff 
     echo $this->x; 
    } 
} 

class Slave2 extends Master { 
    public function process() { 
     // do other stuff 
     echo $this->x; 
    } 
} 

// Usage example 
$foo = new Slave1(); 
$bar = new Slave2(); 
$foo->process(); 
$bar->process();