Вопрос наследования PHP относительно расширенных классов - PullRequest
3 голосов
/ 19 сентября 2011

Если у меня есть два класса, расширяющих 3-й класс, будет ли содержимое 3-го класса создаваться дважды при создании экземпляров обоих, 1-го и 2-го классов?

Пример:

class class1 extends class3{}

class class2 extends class3{}

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

$class1 = new class1();

$class2 = new class2();

В приведенном выше примере объект db будет создан два раза? на этот случай в результате чего 2 подключения к mysql?

Спасибо

Ответы [ 3 ]

2 голосов
/ 19 сентября 2011

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

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

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

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

// etc.
1 голос
/ 19 сентября 2011

сначала,

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

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

0 голосов
/ 19 сентября 2011

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

...