wordpress — конструктор дочернего класса php, вызываемый с родительским объектом в качестве параметра

Я не очень хорошо разбираюсь в синтаксисе php, поэтому вот мой вопрос:

У меня есть класс Foo.

Класс Бар расширяет Фу.

Я хочу сделать конструктор для Bar, который вызывается с экземпляром класса Foo в качестве параметра, и сделать экземпляр Bar, который выглядит точно так же, как экземпляр класса Foo.

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

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

так:

class Foo {      // in the original plugin
public function __construct() {
<do some stuff>
}
}

class Bar extends Foo {     // in my plugin to extend the original plugin
public function __construct($myFooObject) {
<I want: $this = $myFooObject; but it doesnt work>
<do some stuff special to Bar>
}
}

1

Решение

<?php

class Bar extends Foo { // in my plugin to extend the original plugin
public function __construct($myFooObject) {
foreach (get_object_vars($myFooObject) as $key=>$value){
$this->$key = $value;
}

// <I want: $this = $myFooObject; but it doesnt work>
// <do some stuff special to Bar>
}
}

Это будет не только экземпляр с Foo свойства, но копировать $myFooObject Свойства на создание.

0

Другие решения

Что ж. Вы уже наследуете функции и члены класса Foo. То, что вы только что упустили, это вызвать конструктор родительского класса (конструктор Foo).

Добавьте следующую строку в ваш бар __construct():

parent::__constrcut();

Бар теперь выглядит так:

class Bar extends Foo {     // in my plugin to extend the original plugin
public function __construct($myFooObject) {
parent::__construct(); // we've added this line to call the parent constructor
<do some stuff special to Bar>
}
}

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

1

По вопросам рекламы [email protected]