php несколько классов и методов с одинаковым именем - PullRequest
0 голосов
/ 27 ноября 2011

Если я вызову «myClass :: getItems ()» из «workingCLass», какой метод getId будет вызван? Тот, который повторяет "привет" или "пока"? Спасибо.

class myClass extends otherClass {
   function getId(){
      echo "hello";
   }
}


class otherClass{
   function getItems(){
      $this->getId();
   }
   function getId(){
      echo "bye";
   }
}


class workingClass extends myClass {
   function __construct(){
      $this->getItems();
   }
}

Ответы [ 2 ]

2 голосов
/ 27 ноября 2011

Это приведет к фатальной ошибке, поскольку вы вызываете этот метод статически (::), а внутри этого метода вы используете специальную переменную $this, которая ссылается на workingClass (объект, из которого он был вызван) иworkingClass не имеет getId метода.

ОК, теперь после исправления примера я могу сказать, что он выведет «привет», потому что при вызове метода из объекта ($this->) PHP всегда будет работатьопределенный в последнем дочернем классе.

2 голосов
/ 27 ноября 2011

Тот, у которого "hello", потому что вы явно указали, какой из них вызывать.

Проблема, однако, в том, что он не статичен, и вы называете его в статическом контексте.

РЕДАКТИРОВАТЬ: С $this, он не будет ничего вызывать, потому что нет getItems() в workingClass. Если бы workingClass расширило otherClass, это сделало бы "bye" вещь.

...