在下面的程序中最后一个语句echo $objb-> test;不应该输出任何值.第二个语句应该抛出一个错误,说无法访问私有成员.但是,我在运行程序时得到输出20.
由于PHP是松散类型的语言,因此$objb在类外创建一个新变量…
<?PHP error_reporting(E_ALL); class A { public $a; private $test; protected function sayhello(){ echo "<p>hello class A</p>"; } }//end of class A class B extends A { //private $c; public function sayhellonew(){ $this->sayhello(); echo "<p>hello class B</p>"; } }//end of class B $objb = new B(); $objb->sayhellonew(); $objb->a = 10; echo $objb->a; echo "<br>"; $objb->test = 20; echo $objb->test; ?>
产量
我得到输出20为什么它工作?
由于$test属性是A的私有属性,因此在B的范围内不可见.这意味着B可以拥有自己的名为$test的属性.当您指定objb-> test = 20时,这就是您要设置的内容.
以下显示您实际上没有设置私有变量:
class A { public $a; private $test = 10; protected function sayhello(){ echo "<p>hello class A</p>"; } public function showTestA() { echo "Test in A = " . $this->test . '<br>'; } }//end of class A class B extends A { //private $c; public function sayhellonew(){ $this->sayhello(); echo "<p>hello class B</p>"; } public function showTestB() { echo "Test in B = " . $this->test . '<br>'; } }//end of class B $objb = new B(); $objb->test = 20; $objb->showTestA(); $objb->showTestB();
这将显示:
Test in A = 10 Test in B = 20