Унаследованные от PHP свойства массива - PullRequest
4 голосов
/ 21 января 2010

У меня есть иерархия классов в PHP 5.2.9.

Базовый класс имеет защищенное свойство, которое является ассоциативным массивом.

Дочерние классы могут добавлять некоторые элементы в массив.

Дочерние классы объявлены в отдельных файлах (плагинах), которые будут созданы и добавлены несколькими разработчиками.

Каков наилучший способ добавить элементы к свойству в дочерних классах, чтобы объявление нового потомка было как можно более простым?

<?php
        class A {
                protected $myproperty = array (
                        'A1' => 1,
                        'A2' => 2
                );

                function myprint()
                {
                        print_r($this->myproperty);
                }
        };

        class B extends A {
                // add 'B1', 'B2' to myproperty
        };

        class C extends B {
                // add 'C1', 'C2' to myproperty
        };

        $c = new C();
        $c->myprint();
        // The line above should print A1, A2, B1, B2, C1, C2
?>

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

1 Ответ

3 голосов
/ 21 января 2010

Используйте конструкторы унаследованных классов, для класса B это будет выглядеть примерно так:

class B extends A {
    function __construct() {
        parent::__construct();                // Call constructor of parent class
        array_push($myproperty, "B1", "B2");  // Add our properties
    }
}

То же самое относится к классу С.

Если у вас много унаследованных классов или вы хотите обеспечить как можно большую поддержку, вы можете поместить этот код в некоторую функцию. Поэтому другим разработчикам нужно только вызвать эту функцию в своем конструкторе, чтобы «зарегистрировать» своего потомка.

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