Класс базы данных конфликтует с другими классами - PullRequest
0 голосов
/ 02 апреля 2012

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

class User extends Database {...}

Проблема в том, что, когда я инициализирую класс базы данных и класс пользователя одновременно в «index.php», я получаю фатальную ошибку, которая говорит: «Фатальная ошибка: невозможно переопределить класс базы данных».

include "database.class.php";
include "user.class.php;
$db = new Database;
$db->connect();

Итак, я знаю об инициализации класса базы данных дважды, но как этого избежать? П.С .: Я могу использовать класс Database в других новых классах.

Ответы [ 2 ]

1 голос
/ 03 апреля 2012

В ООП extends означает «является». То, что вы там написали, говорит: «Пользователь - это база данных». Который является достоверно помешанным.

Вместо того, чтобы расширять класс базы данных, вы должны внедрить его в конструктор User instance:

$database = new Database(...);
$database->connect();
$user = new User( $database );

Всегда отдавать предпочтение композиции, а не наследованию .

Что касается всего этого require_once беспорядка .. просто научитесь использовать spl_autoload_register().

1 голос
/ 03 апреля 2012

Замените два «include», которые у вас есть, на «require_once», как сказал Майкл:

require_once "database.class.php";
require_once "user.class.php";
$db = new Database;
$db->connect();

Кроме того, если в файле «user.class.php» вы включаете файл «database».class.php ", измените его на" require_once "тоже.

Надеюсь, это помогло!

...