$ this如何在php中工作?

时间:2018-12-16 09:14:02

标签: php oop this

我只想清楚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

2 个答案:

答案 0 :(得分:1)

  

// classAFunc //我希望这应该输出classB

$ this与实现所需目标无关,因为程序中的函数func1name属性从"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类