PHP - Абстрактный класс с правильным объявлением свойства

1

У меня есть мой абстрактный класс:

class AbstractClass
{
    public function func($arguments)
    {
        // $this->array[0] (...)
    }
}

И мой класс ребенка:

class ChildClass extends AbstractClass
{
    protected $array = [
        //(some content)
    ];
}

И когда я запускаю (new ChildClass)->func() я получаю предупреждение "Массив свойств не существует". Должен ли я помещать array свойств в AbstractClass или просто игнорировать предупреждение?

  • 1
    Можете ли вы обновить код, чтобы показать, что именно вы делаете? Когда я добавляю key , value в protected $array и вызываю его в AbstractClass он работает нормально.
  • 0
    @RhapX, мой код работает, так как это всего лишь предупреждение. Я просто хочу знать, что является лучшей практикой.
Показать ещё 1 комментарий
Теги:

1 ответ

1
Лучший ответ

Просто переместите свойство в AbstractClass с некоторым значением по умолчанию. Например

class AbstractClass 
{                                                                                  
    protected $array = ['default'];                                                         

    public function show()                                                         
    {                                                                              
        print_r($this->array);                                                     
    }                                                                                                                                                          
}                                                                                  

class A extends AbstractClass                                                      
{                                                                                  
    protected $array =[1,2,3,4,5];                                           
}                                                                                  

class B extends AbstractClass                                                      
{                                                                                  
    protected $array =['A','B','C','D'];                           
}  

class C extends AbstractClass
{
   // use the defaults
}

echo (new A)->show();                                                              
echo (new B)->show();
echo (new C)->show();

Выход

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
)
Array
(
    [0] => A
    [1] => B
    [2] => C
    [3] => D
)
Array
(
    [0] => default
)

Нет предупреждений.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню