Наследование PHP - PullRequest
       6

Наследование PHP

0 голосов
/ 14 июля 2011

У меня есть следующие 3 класса:

class ParentClass {
    protected $myVar = array();

    function __construct() {
        var_dump($this->myVar);
    }
}

class FirstClass extends ParentClass {
    protected $myVar = array('defaultVal');
}

class SecondClass extends FirstClass {
    protected $myVar = array('anotherVal');
}

Если бы я должен был сделать следующее:

$class = new SecondClass();

Тогда я получу array('anotherVal') что я могу добавить к конструкции ParentClass, чтобы я действительно получил array('defaultVal', 'anotherVal')

Заранее спасибо!

Ответы [ 4 ]

5 голосов
/ 14 июля 2011

По какой-то странной причине переполнение стека продолжает стирать мой предыдущий ответ. Итак, вот новый.

class ParentClass {
    protected $myVar;

    function __construct() {
        $this->myVar = array();
    }
}

class FirstClass extends ParentClass {
    function __construct() {
        parent::__construct();
        $this->myVar[] = 'default val';
    }
}

class SecondClass extends FirstClass {
    function __construct() {
        parent::__construct();
        $this->myVar[] = 'another val';
    }

    public function printArr() {
        print_r($this->myVar);
    }
}

$class = new Secondclass();
$class->printArr();
0 голосов
/ 14 июля 2011

После дальнейших исследований я нашел простой способ сделать это get_class_vars :

class ParentClass {
    protected $myVar = array();

    function __construct() {
        $firstClassVars = get_class_vars('FirstClass');
        $this->myVar= array_merge($this->myVar, $firstClassVars['myVar']);
        var_dump($this->myVar);
    }
}

Это решает мои проблемы ...

Спасибо, ребята!

0 голосов
/ 14 июля 2011

Используя идеи этой страницы , я бы предложил следующее:

class ParentClass {
    protected $myVar = array();

    function __construct() {
        var_dump($this->myVar);
    }
}

class FirstClass extends ParentClass {
    function __construct() {
        array_unshift($this->myVar, "defaultVar");
        parent::__construct();
    }
}

class SecondClass extends FirstClass {
    function __construct() {
        array_unshift($this->myVar, "anotherVal");
        parent::__construct();
    }
}
$class = new ParentClass();
$class1 = new FirstClass();
$class2 = new SecondClass();

Что дает мне следующий вывод:

array(0) {
}
array(1) {
  [0]=>
  string(10) "defaultVar"
}
array(2) {
  [0]=>
  string(10) "defaultVar"
  [1]=>
  string(10) "anotherVal"
}
0 голосов
/ 14 июля 2011

Измените ваши назначения на array_push () .

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