PHP OOP - требует или расширяет - PullRequest
0 голосов
/ 13 апреля 2011

Мне было интересно, есть ли какие-либо существенные отличия в следующем, и является ли одно «более стандартным», чем другое:

<?php

class Account extends Database {

    public function myMethod()
    {
        // Do something
    }

}

?>

или

<?php

require('database.class.php');

class Account {

    public function myMethod()
    {
        // Do something
    }

}

?>

Приветствия :)

Редактировать:

Этот вопрос на самом деле относится к серии руководств, которой я следовал, в которой описываются два вышеупомянутых метода - которые не имели никакого ясного смысла.

Так что спасибо за конструктивные ответы на этот вопрос!

Ответы [ 5 ]

2 голосов
/ 13 апреля 2011

Это две совершенно разные языковые конструкции.

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

Во втором примере ваш код, связанный с базой данных, полностью отделен от вашего класса Account.Это совершенно разные сущности, и если вы хотите сделать что-нибудь связанное с базой данных в своем классе Account, вам придется явно создать экземпляр нового объекта Database в этом классе (или передать его в этот класс или одна из его функций в качестве параметра.

Как правило, extends помогает определить что такое класс, тогда как require показывает , где aопределение класса (или другой код) сохраняется.

2 голосов
/ 13 апреля 2011

Оба фрагмента кода даже не эквивалентны.

Первый объявляет учетную запись для расширения базы данных, отношения is-a.

Во втором фрагменте кода вы просто говорите, что вам требуется 'database.class.php' ... и что он не имеет ничего общего с ОО и не определяет отношение is из Account в базу данных.

1 голос
/ 13 апреля 2011

Первый означает, что вы создаете новый класс, который имеет все функциональные возможности класса Database и те, которые вы реализуете.

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

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

1 голос
/ 13 апреля 2011

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

Но во втором методе класс включен в ваш скрипт и требует, чтобы этот класс был его собственным методом и работал независимо.

0 голосов
/ 20 декабря 2012

Проще говоря: -

require или include - структурное программирование.

extends является объектно-ориентированным

...