2015-05-14 66 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();