Присоединение к переменной массива в родительском классе в PHP - PullRequest
2 голосов
/ 22 октября 2008

Как расширить массив опций моего родителя для дочерних классов в PHP?

У меня есть что-то вроде этого:

class ParentClass {

     public $options = array(
          'option1'=>'setting1'
     );

     //The rest of the functions would follow
}

Я хотел бы добавить к этому массиву опций дочерний класс, не стирая ни один из родительских опций. Я пытался сделать что-то вроде этого, но пока не совсем заработал:

class ChildClass extends ParentClass {

     public $options = parent::options + array(
          'option2'=>'setting2'
     );

     //The rest of the functions would follow
}

Какой лучший способ сделать что-то подобное?

Ответы [ 3 ]

8 голосов
/ 22 октября 2008

Я думаю, что лучше инициализировать это свойство в конструкторе, а затем вы можете расширить значение в любом классе-потомке:

<?php
class ParentClass {

    public $options;
    public function __construct() {
        $this->options = array(
            'option1'=>'setting1'
        );
    }
    //The rest of the functions would follow
}

class ChildClass extends ParentClass {
    public function __construct() {
        parent::__construct();
        $this->options['option2'] = 'setting2';
    }
    //The rest of the functions would follow
}
?>
1 голос
/ 22 октября 2008

Можете ли вы array_merge ?

Предполагается, что вы используете ctr для создания класса.

1007 * Е.Г. *

public function __construct(array $foo)
{
  $this->options = array_merge(parent::$options, $foo);
}
1 голос
/ 22 октября 2008

PHP или нет, у вас должен быть аксессор, чтобы вы могли позвонить $self->append_elements( 'foo' => 'bar' ); и не беспокоиться о внутренней реализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...