Основная проблема класса php - PullRequest
1 голос
/ 01 августа 2009

Потерпи меня, потому что я новичок! Можно ли присвоить результат функции атрибуту?
Это, вероятно, не имеет смысла, поэтому я думаю, что код может выглядеть так!

Class b extends a 
{ 
    public $conn= $this->connect();

    public function operation() { ...}

}

connect() - это функция из класса a, которая подключается к базе данных и возвращает $result в случае успеха.

Ответы [ 4 ]

9 голосов
/ 01 августа 2009

Да, это возможно, но вам нужно сделать это с помощью метода, подобного конструктору :

Class b extends a { 
    public $conn;
    public function __construct() {
        $this->conn = $this->connect();
    }
    public function operation() { /* ... */ }
}
0 голосов
/ 01 августа 2009

я обычно делаю что-то вроде этого

$link = mysql_connect(.....,......,......);

Class b extends a { 
    public $conn;
    public function __construct($link) {
        $this->conn = $link;
    }
    public function operation() { /* ... */ }
}
$a = new b($link);

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

Еще один совет по интеграции баз данных oop всегда имеет базовый класс DBable для выполнения базовых функций save () load () find () count () и т. Д., Значительно быстрее для работы с объектами, сохраняемыми в БД

BaseDBClass
   A
      B
      C
      D
   X
      Y
      Z
0 голосов
/ 01 августа 2009

Как правило, это дурной тон, поскольку вы не можете быть уверены, какая реализация метода connect() будет вызвана. Это из текущего класса или из суперкласса? На самом деле, я был бы удивлен, если бы PHP даже допустил это.

Инициализация должна выполняться в конструкторе, но даже в этом случае это зависит от того, что включает в себя инициализация. Если это требует вызова другого метода, то возникает та же проблема, что и выше: какую версию метода вызывать?

Однако для сценария, который вы описываете, я бы не инициализировал переменную-член при объявлении, а также из конструктора. Вместо этого я бы передал $conn конструктору. Это основа внедрения зависимости.

0 голосов
/ 01 августа 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...