2012-02-24 3 views
1

У меня есть класс User, расширяющий класс абстрактных классов Id. Как-то я представим еще один класс под названием Event, расширяющий класс Id. Методы __construct() очень похожи, поэтому я хочу поместить код конструктора в класс Id.значения установки php на уровне родителей

Вот мой __construct() метод:

class Event extends Id 
{ 
    public function __construct($id, $object){ 
     $this->id = $id; 
     foreach($object as $property => $value) { 
      if (property_exists($this, $property)) $this->$property = $value; 
     } 
    } 
} 

class User extends Id 
{ 
    public function __construct($id, $object){ 
     $this->id = $id; 
     foreach($object as $property => $value) { 
      if (property_exists($this, $property)) $this->$property = $value; 
     } 
    } 
} 

Однако, если я поставил метод в классе Id, PHP предупреждает меня в $this->$property = $value;. В нем указано, что у меня есть некоторые атрибуты, указанные private в классе User или Event, так что он не может быть инициирован в классе Id.

То, что я хочу, чтобы повторно использовать свой код, сохраняя при этом эти переменные private

ответ

0

Некоторые опции (потому что я не хочу, кроме прочего родительского класса для доступа к ним!):

  • Используйте protected переменные

  • Вы можете использовать Reflection, чтобы обмануть и установить частные переменные.

  • Используйте черты (5.4), чтобы импортировать общую __construct

  • отрефакторим немного. например, иметь setProperty в дочерних классах, которые родитель вызывает, или реализовать __set и т. д.

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