2015-05-14 73 views
0

比方說,我有這個PHP腳本的問題:PHP OOP:與性能和擴展類

<?php 

class Aaa 
{ 
    protected $var = null; 

    public function performSomething() 
    { 
     $this->var = 'Now we have a string, not more null value'; 
     $bbb = New Bbb(); 
     $bbb->powerOnYou(); 

    } 
} 


class Bbb extends Aaa 
{ 
    public function powerOnYou() 
    { 
     var_dump($this->var); 
     // this dump "NULL" and not string 
    } 
} 


$aaa = New Aaa(); 
$aaa->performSomething(); 

你怎麼可以注意到這個類「的var_dump」每次NULL,而不是字符串。

當然我需要輸出字符串。

這也是沙箱鏈接:http://sandbox.onlinephpfunctions.com/code/6cd253e1945e78f114749be55ffc5f88ab44dd42

謝謝

+1

因爲你有兩個物體?!彼此不必做任何事情。類的每個實例都是**完全**新類的定義副本。 – Rizier123

+0

因爲這只是一個例子。例如,它可能是一個控制器,可以給其他控制器「控制」......例如,基於REST API ... – sineverba

+0

@DavidKmenta並解決我的「代碼」/「問題」?我需要如何更改我的代碼?謝謝...... – sineverba

回答

1

注意$var是一個實例變量,而不是一類變量。這意味着,你班級的每個實例都有自己的副本。

您創建了一個類Aaa的實例並將$aaa的副本$var設置爲'Now we have a string, not more null value'。但是,在performSomething()內部,您將創建一個類別爲Bbb的全新實例,該實例具有其自己的$var副本。由於您沒有設置$bbb$var,因此輸出時爲null

看看這段代碼並試圖理解它;我沒有機會測試它,因爲我現在正在工作,但它應該會給你想要的輸出:

<?php 

class Aaa 
{ 
    protected $var = null; 

    public function powerOnYou() 
    { 
     var_dump($this->var); 
    } 
} 


class Bbb extends Aaa 
{ 
    public function performSomething() 
    { 
     $this->var = 'Now we have a string, not more null value'; 
     $this->powerOnYou(); 
    } 
} 


$bbb = New Bbb(); 
$bbb->performSomething();