Это две совершенно разные языковые конструкции.
Ваш первый пример имеет дело с наследованием.По сути, у вас уже есть класс с именем Database
, но вы хотите иметь специализированную версию этого класса для обработки учетных записей.Вместо того чтобы создавать новый класс Account
и копировать / вставлять все функции, которые у вас уже есть в вашем классе Database
, вы просто говорите PHP, что хотите использовать существующий класс Database
в качестве базового уровня.Вы создаете любые специфичные для учетной записи функции в новом классе Account
, и все, что связано с базой данных, приходит автоматически.Конечно, это предполагает, что у вас есть какой-то способ указать, где определен класс Database
- например, объявление require
в верхней части класса или вызов функции __autoload()
или spl_autoload_register()
, определяющийспособ найти и найти файл, содержащий класс Database
.
Во втором примере ваш код, связанный с базой данных, полностью отделен от вашего класса Account
.Это совершенно разные сущности, и если вы хотите сделать что-нибудь связанное с базой данных в своем классе Account
, вам придется явно создать экземпляр нового объекта Database
в этом классе (или передать его в этот класс или одна из его функций в качестве параметра.
Как правило, extends
помогает определить что такое класс, тогда как require
показывает , где aопределение класса (или другой код) сохраняется.