2015-08-09 2 views
1

У меня есть абстрактный класс:PHP - абстрактный класс с декларацией правильно собственности

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', он отлично работает. – RhapX

+0

@RhapX, мой код работает, поскольку это всего лишь предупреждение. Я просто хочу знать, что такое лучшая практика. – Christopher

+0

Я вижу, устанавливаю значение по умолчанию для переменной '$ arguments'. Когда вы вызываете метод, вы ничего не передаете ему. – RhapX

ответ

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 
) 

Никаких предупреждений.

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