我只想清楚PHP中$this
的行为。从下面的程序中,我想知道如何将B类中的$ this引用给A类成员,同时也如何使用$ this引用B类作用域。
<?php //php 7.0.8
class A{
public $name="test";
public function func1(){
echo $this->name="classAFunc";
}
}
class B extends A {
public $name="classB";
public function func2(){
echo $this->name ;
}
}
$test = new B();
echo $test->name; // classB
echo $test->func1();//classAFunc
echo $test->func2();//classAFunc //I want this should output classB
?>
如果我在某个地方出错,请指出。您指的是这里玩耍:run this program
答案 0 :(得分:1)
// classAFunc //我希望这应该输出classB
$ this与实现所需目标无关,因为程序中的函数func1
将name
属性从"classB"
更改为"classAFunc"
,这就是您要执行的操作在这里
echo $test->name; // classB
echo $test->func1();//classAFunc (func1 sets the name property to classAFunc)
echo $test->func2();//classAFunc //name property of the object is already changed by func1
您可以在func2()
之前致电func1()
来获取所需的信息
或者您可以func2()
这样设置name属性
public function func2(){
echo $this->name = "classB";
}
注意:当B
扩展了A
的{{1}}属性时,意味着name
的对象将只有1个B
属性,而不是2个!
答案 1 :(得分:0)
将$ name变量的访问修饰符更改为private。 即 公开的$ name =“ test”;私有$ name =“ test”; A类