Доступ к родительским переменным в дочернем методе - PullRequest
0 голосов
/ 11 октября 2009

В настоящее время у меня есть два класса, один называется Собака, другой - Пудель.Теперь, как я могу использовать переменную, определенную в Dog из класса Poodle.Мой код выглядит следующим образом:

  class dog {
       protected static $name = '';

       function __construct($name) {
            $this->name = $name
       }
  }

  class Poodle extends dog {
       function __construct($name) {
           parent::__construct($name)
       } 

       function getName(){
           return parent::$name;
       }
  }

$poodle = new Poodle("Benjy");
print $poodle->getName();

Я получаю эту ошибку

Примечание: неопределенная переменная: имя

Ответы [ 3 ]

5 голосов
/ 11 октября 2009

Я думаю, «имя» - это атрибут конкретной собаки, поэтому она не должна быть статичной. Чтобы получить доступ к нестатическим атрибутам родительского класса из унаследованного класса, просто используйте «$ this».

    class dog {
       protected $name = '';

       function __construct($name) {
            $this->name = $name;
       }
    }

    class Poodle extends dog {
       function getName(){
           return $this->name;
       }
    }
2 голосов
/ 11 октября 2009

Проблема в вашем Dog конструкторе. Вы написали:

$this->name = $name;

Но использование $this подразумевает, что name является переменной instance , тогда как на самом деле это static переменная. Измените это на это:

self::$name = $name;

Это должно работать нормально.

0 голосов
/ 11 октября 2009

В вашем классе собаки вы объявили переменную $ name как static , вы должны объявить переменную без статического слова

class dog {
   protected $name = '';

   function __construct($name) {
        $this->name = $name
   }
}



class Poodle extends dog {
   function __construct($name) {
       parent::__construct($name)
   } 

   function getName(){
       return $this->name;
   }
}

$poodle = new Poodle("Benjy");
print $poodle->getName();
...