2009-06-09 1 views

ответ

8

Ваш include_once читает в исходном файле, который в этом случае предположительно имеет определение класса для B. Ваш extends устанавливает класс A как inheriting класс B, то есть A получает все в B и может затем определить его собственные изменения в этой базовой структуре. Между этими двумя операциями вообще нет никаких отношений, а ваши операции $a = new B бессмысленны (не говоря уже о синтаксических ошибках).

6

В случае, если вы ищете более высокий уровень ответа ...

Использование распространяется Связывает делать вещи так же, как B, в то время как создание экземпляра B в A не накладывает никаких ограничений на А.

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

Мои 2 Cents

+0

что медленнее удлинение или в том числе я просто сделал небольшой тест, и я обнаружил, что расширение делает код немного медленнее, это то, что вы имели в виду..?.? – daniel

+1

Скажите, что я хочу вызвать foo на A и он делегирует foo на B, тогда будет время для двух вызовов метода в подходе Composition. Если A расширяет B, то вызов foo на A считается одним вызовом метода, и нет необходимости в поиске, кроме случаев, когда классы определены (что происходит один раз). –

1

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

Кстати, если вы не включаете файл, содержащий исходный код класса A, вы не можете расширять этот класс.

Расширение класса с ключевым словом extends подразумевает концепцию наследования, которая является ключевым понятием в объектно-ориентированном программировании.

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

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

На википедии вы можете найти лучшее объяснение на object composition и [класс наследования] (http://en.wikipedia.org/wiki/Inheritance_(computer_science))

Кажется, есть немного confusione на этих понятиях, как вы расширить класс А и, в то же время, вам попробуйте его составить (кстати, правильный синтаксис: $ a = new B();).

Полезным справочным это, очевидно, [Гоф, Дизайн модели] (http://en.wikipedia.org/wiki/Design_Patterns_(book))

2

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

.

Так - второй не возможен никогда не первый

Смежные вопросы