Вопрос наследования 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?

Спасибо,

Author: Henrique, 2011-09-19

3 answers

Во-первых,

class 3{
     $this->db = new mysql();
} 

Не будет выполняться из-за синтаксической ошибки. у вас не может быть кода в классе, если он не находится в методе. Я предполагаю, что вы имели в виду, что строка создания объекта должна быть в методе конструктора класса __construct(). В этом случае код будет выполняться каждый раз при создании экземпляра любого из классов. это, конечно, если вы не перезаписали метод в одном из прилагаемых классов.

 1
Author: dqhendricks, 2011-09-18 23:50:05

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

Если базовый класс открывает соединение с базой данных (но для этого требуется написать какой-нибудь нетривиальный код, например конструктор), то это произойдет в любом производном экземпляре:

class Base
{
  private $db;  // maybe "protected"...
  public function __construct() { $db = new mysqli; /* + connect! */ }
}

class Der1 extends Base
{
  public function __construct() { parent::__construct(); }
}

// etc.
 2
Author: Kerrek SB, 2011-09-18 23:57:59

Если новый mysql() создает соединение, да

 0
Author: galchen, 2011-09-18 23:49:54