Как это работает в php? - PullRequest
       31

Как это работает в php?

0 голосов
/ 16 декабря 2018

Мне просто нужна ясность поведения $this в PHP.Из приведенной ниже программы я хочу узнать, как можно связать $ this в классе B с членами класса 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

?>

Если я что-то не так, пожалуйста, укажите это.здесь вы можете поиграть: запустить эту программу

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

// classAFunc // Я хочу, чтобы это вывело classB

$, это не имеет ничего общего с достижением того, что вы хотите, потому что функция 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(), чтобы получить то, что вы хотите

или вы можетеmake func2() устанавливает свойство name следующим образом:

public function func2(){
    echo $this->name = "classB";
} 

Примечание: когда B extended A их свойство name объединено, то есть объекты B будут иметь только 1 name свойство не 2!

0 голосов
/ 16 декабря 2018

Изменить модификатор доступа переменной $ name на private.то есть;public $ name = "test";в личное $ name = "test";класса А

...