Я довольно новичок в PHP и мне интересно, возникнут ли какие-либо проблемы, если установить переменную класса в качестве нового экземпляра другого класса, который, в свою очередь, расширяет тот же базовый класс, что и первый класс. По сути, если у меня есть два класса, A и B, оба расширяют базовый класс. Могу ли я иметь класс C, который расширяет A и создает новый экземпляр B? Я хотел бы сделать что-то вроде этого:
// In its own file (BaseClass.php)
class Base {
public function log($message) {
// Write $message to the log
}
}
// In its own file (ClassA.php)
require_once("path/to/BaseClass.php");
class A extends Base {
public function test() {
// Do some test
}
}
// In its own file (ClassB.php)
require_once("path/to/BaseClass.php");
class B extends Base {
public function getData() {
// Get data here
}
}
// In its own file (ClassC.php)
require_once("path/to/ClassA.php");
require_once("path/to/ClassB.php");
class C extends A {
protected $classB;
public function run() {
// Initialize an instance of class B
$this->classB = new B;
// Can call log() function of Base class because
// class C extends class A which extends Base
$this->log("Log Message");
// Can also call log() function of Base class through
// class B because class B extends Base
$this->classB->log("Another Log Message");
}
}
$classC = new C;
$classC->run();
Будут ли какие-либо конфликты при (насколько я понимаю) инициализации базового класса дважды внутри одного и того же класса C, и будет ли он работать для вызова log()
Функция Base двумя разными способами?
Я настоятельно рекомендую не продолжать с моделью, которую вы придумали.
Это отличная статья, которая помогает понять принципы разработки программного обеспечения SOLID, и, похоже, ваше приложение отклоняется от https://scotch.io/bar-talk/s-o-l-i-d-the-first-five-principles-of-object-oriented-design
Я знаю, что это никоим образом не отвечает на ваш вопрос; но это неправильный вопрос, и вам не стоит побуждать вас продолжать разработку программного обеспечения таким образом.
Других решений пока нет …