2009-10-11 1 views
0

В настоящее время у меня есть два класса, один из которых называется Dog, один называется Poodle. Теперь, как я могу использовать переменную, определенную в 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(); 

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

Примечание: Undefined переменной: имя

+0

Не нужно ли наследовать? – palindrom

+0

Oooops жаль, ребята, я пропустил это немного из моего кода, когда я отправлял его здесь. он все еще не работает с продолжением в – Matt

ответ

2

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

$this->name = $name; 

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

self::$name = $name; 

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

+0

+1, вы правы. –

+0

Однако не имеет смысла иметь все (присущие) экземпляры собаки с тем же именем, поэтому статичность здесь не имеет особого смысла. –

0

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

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(); 
5

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

class dog { 
     protected $name = ''; 

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

    class Poodle extends dog { 
     function getName(){ 
      return $this->name; 
     } 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^