Они доступны, но они будут null
, потому что они не передаются родительскому конструктору от дочернего:
(new ChildClass(1,2))->anotherFakeMethod();
Песочница
выход
NULL
В этом случае ваши классы дают ожидаемый результат null
. Ну, это производит то, что я ожидал бы, основываясь на том, как это закодировано.
Чтобы исправить это, вы должны передать эти данные родительскому классу через конструктор дочернего элемента или удалить конструктор дочернего элемента. Как это:
class ChildClass extends ParentClass {
public function __construct($prop1, $prop2) {
parent::__construct($prop1, $prop2);
}
....
}
После вышеуказанного изменения:
(new ChildClass(1,2))->anotherFakeMethod();
выход
int(1)
Песочница
Что я и ожидал от этой строки, так как это первый аргумент, используемый в конструкторе:
var_dump($this->prop1);
Вы также можете сделать это таким образом, если вы знаете, что они в дочернем классе:
public function __construct() {
parent::__construct(1, 2); //say I know what these are for this child
}
Конечно, вы можете установить их вручную в новом конструкторе, но это будет WET (напишите все дважды) или ненужное дублирование, в этом случае.
Ура!