Каково различие между расширением класса и включая его в PHP?

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

Удалите экземпляр SQL:

sqllocaldb stop MSSQLLocalDB
sqllocaldb delete MSSQLLocalDB

Теперь удалите следующие файлы базы данных:

%USERPROFILE%\AzureStorageEmulatorDb*.mdf
%USERPROFILE%\AzureStorageEmulatorDb*.ldf

Наконец, заново создайте экземпляр SQL:

sqllocaldb start MSSQLLocalDB

Затем повторите попытку эмулятора init.

6
задан chaos 4 August 2009 в 22:14
поделиться

3 ответа

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

8
ответ дан 8 December 2019 в 13:48
поделиться

Если вы ищете ответ более высокого уровня ...

Использование extends привязывает A к действиям, аналогичным B, тогда как создание экземпляра B внутри A не налагает любые ограничения на A.

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

Мои 2 цента

6
ответ дан 8 December 2019 в 13:48
поделиться

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

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

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

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

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

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

Это кажется, что в этих концепциях возникает небольшая путаница, поскольку вы расширяете свой класс A и в то же время пытаетесь его составить (кстати, правильный синтаксис - $ a = new B (); ]).

Полезная ссылка, очевидно, [Gof, Шаблоны проектирования] ( http://en.wikipedia.org/wiki/Design_Patterns_ (книга))

1
ответ дан 8 December 2019 в 13:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: