#php #class #constructor
#php #класс #конструктор
Вопрос:
У меня есть родительский класс, выполняющий ведение журнала для всех действий. Теперь я хочу использовать дочерний класс для добавления дополнительных данных к некоторым действиям. Это означает, что мне нужны переменные родительского элемента о действиях, и мне нужно запускать дочерний элемент при вызове родительского элемента.
Это родительский конструктор:
function CD_Log( $id = false ) {
$this->__construct( $id );
}
function __construct( $id = false ) {
if ( !empty( $id ) ) {
$this->id = $id;
$this->populate();
}
}
Вот как я думаю, что дочерний конструктор будет:
function __construct( $args = array() ) {
parent::__construct($child_id);
$defaults = array(
'child_id' => 0, //the child has its own id
'child_data' => 0, //extra data
'parent_data' => $this->data // inheritage from parent
);
}
В функциях, вызывающих дочерний элемент, я предоставлю массив данных по умолчанию. Дочерний элемент будет вызываться в том же месте, что и вызываемый родительский элемент. Работает ли этот код?
Комментарии:
1. я думаю, что вы неправильно используете все наследование.
Ответ №1:
Я несколько раз прочитал вопрос и нахожу его невероятно запутанным. Я бы очень хотел вам помочь, но думаю, было бы проще, если бы вы подробнее рассказали о том, чего именно вы хотите и что должна делать система.
Почему вы должны запускать родительский класс при запуске дочернего класса? Не могли бы вы попробовать делегировать информацию в дочерний класс? Кроме того, почему вы вызываете конструктор через другой метод, когда он все равно будет инициализирован перед CD_Log
методом?
Комментарии:
1. Я хочу, чтобы некоторые данные родительского элемента были в том же объекте, что является большой задачей, если перекодировать его, чтобы получить. Если я использую $new = New CD_Log($id), то мне нужно знать, какой идентификатор соответствует текущему объекту дочернего элемента.
2. Зачем вам вообще использовать родительский класс, когда вы могли бы просто использовать дочерний класс, который в любом случае унаследовал бы все свойства и методы родительского элемента?
3. если не использовать parent, откуда дочерний элемент наследует вещи?
4. Вам не нужно создавать экземпляр родительского класса, чтобы использовать его. Вы можете включить / потребовать его перед созданием экземпляра дочернего класса, и, таким образом, он будет правильно наследоваться. Но это также означает, что все значения, которые вы использовали для предоставления родительскому классу, теперь вы передадите дочернему классу, который в основном будет таким же, как дочерний, содержит все родительские методы и свойства. Классы — это чертежи, а не объекты, поэтому вам не нужно «создавать» родительский класс, чтобы использовать его, если у вас есть рецепт.
5. Я не думаю, что смогу включить файл родительского класса. Это большая программа, calss — это просто структура, большая часть данных задается другими функциями, которые также являются большими функциями.