Вопрос наследования PHP относительно расширенных классов
Если у меня есть два класса, расширяющих 3-й класс, будет ли содержимое 3-го класса создаваться дважды при создании экземпляров 1-го и 2-го классов?
Пример:
class class1 extends class3{}
class class2 extends class3{}
class 3{
$this->db = new mysql();
}
$class1 = new class1();
$class2 = new class2();
В приведенном выше примере будет ли объект бд создаваться два раза?, в данном случае, что приведет к 2 подключениям к mysql?
Спасибо,
3 answers
Во-первых,
class 3{
$this->db = new mysql();
}
Не будет выполняться из-за синтаксической ошибки. у вас не может быть кода в классе, если он не находится в методе. Я предполагаю, что вы имели в виду, что строка создания объекта должна быть в методе конструктора класса __construct(). В этом случае код будет выполняться каждый раз при создании экземпляра любого из классов. это, конечно, если вы не перезаписали метод в одном из прилагаемых классов.
В вашем примере есть несколько фундаментальных синтаксических ошибок, но да, производный класс содержит базовый класс в качестве подкласса, и поэтому каждый экземпляр любого производного класса также будет содержать все члены базового класса.
Если базовый класс открывает соединение с базой данных (но для этого требуется написать какой-нибудь нетривиальный код, например конструктор), то это произойдет в любом производном экземпляре:
class Base
{
private $db; // maybe "protected"...
public function __construct() { $db = new mysqli; /* + connect! */ }
}
class Der1 extends Base
{
public function __construct() { parent::__construct(); }
}
// etc.
Если новый mysql() создает соединение, да