17
Binary Studio URL: www.binary-studio.com e-mail: [email protected] Skype: Binary_Studio Phone: +38-062-206-84-61 UKRAINE | UK | SLOVAKIA B. Khmelnitskogo 40 of. 301, Donetsk, Ukraine Podyachih Helen 1 || 17 OOP Что такое объектно ориентированное программирование? Объектно-ориентированное программирование — это стиль кодирования, который позволяет разработчику группировать схожие задачи в классы. Таким образом код соответствует принципу DRY (don't repeat yourself – не повторяй самого себя) и становится лёгким для сопровождения. Одним из преимуществ DRY программирования является то, что если некоторая информация требует изменения вашей программы, то нужно изменять код лишь в одном месте, чтобы обновить алгоритм. Одним из самых страшных ночных кошмаров разработчика является сопровождение кода, в котором данные объявляются снова и снова, что превращает любые изменения в программе в бесконечную игру «прятки», в ходе которой приходится охотиться на повторяющиеся данные и куски алгоритма. Что такое объекты и классы? Прежде, чем погрузиться в чёткие определения ООП, необходимо составить общее представление о разнице между классами и объектами. Класс, например, это проект дома. Он определяет на бумаге как будет выглядеть дом, чётко описывает все взаимосвязи между его различными частями, даже если дом не существует в реальности. А объект — это реальный дом, который построен в соответствии с проектом. Данные, которые хранятся в объекте похожи на дерево, провода и бетон, из которых построен дом: без сборки в соответствии с проектом, они будут всего лишь кучей материалов. Однако, собранные вместе они становятся отличным и удобным домом.

Portfolio of recent projects of binary studio software php h.p..pdf · 2020-02-18 · Как и в случае с конструкторами, ... Объявление свойств

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Portfolio of recent projects of binary studio software php h.p..pdf · 2020-02-18 · Как и в случае с конструкторами, ... Объявление свойств

Binary Studio

URL: www.binary-studio.com e-mail: [email protected] Skype: Binary_Studio Phone: +38-062-206-84-61

UKRAINE | UK | SLOVAKIA B. Khmelnitskogo 40 of. 301, Donetsk, Ukraine

PPooddyyaacchhiihh HHeelleenn

11 |||| 1177

OOP

Что такое объектно ориентированное программирование?

Объектно-ориентированное программирование — это стиль кодирования, который позволяет

разработчику группировать схожие задачи в классы. Таким образом код соответствует

принципу DRY (don't repeat yourself – не повторяй самого себя) и становится лёгким для

сопровождения.

Одним из преимуществ DRY программирования является то, что если некоторая информация

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

обновить алгоритм. Одним из самых страшных ночных кошмаров разработчика является

сопровождение кода, в котором данные объявляются снова и снова, что превращает любые

изменения в программе в бесконечную игру «прятки», в ходе которой приходится охотиться

на повторяющиеся данные и куски алгоритма.

Что такое объекты и классы?

Прежде, чем погрузиться в чёткие определения ООП, необходимо составить общее

представление о разнице между классами и объектами.

Класс, например, это проект дома. Он определяет на бумаге как будет выглядеть дом, чётко

описывает все взаимосвязи между его различными частями, даже если дом не существует в

реальности.

А объект — это реальный дом, который построен в соответствии с проектом. Данные, которые

хранятся в объекте похожи на дерево, провода и бетон, из которых построен дом: без сборки

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

вместе они становятся отличным и удобным домом.

Page 2: Portfolio of recent projects of binary studio software php h.p..pdf · 2020-02-18 · Как и в случае с конструкторами, ... Объявление свойств

Binary Studio

URL: www.binary-studio.com e-mail: [email protected] Skype: Binary_Studio Phone: +38-062-206-84-61

UKRAINE | UK | SLOVAKIA B. Khmelnitskogo 40 of. 301, Donetsk, Ukraine

PPooddyyaacchhiihh HHeelleenn

22 |||| 1177

Классы формируют структуру данных и действий и используют эту информацию для

строительства объектов. Из одного класса может быть построено более одного объекта в

одно и тоже время, каждый из них будет независим от других.

О С Н О В НЫ Е П О Н Я Т И Я ( M A I N F E A T U R E S )

Абстракция

Абстрагирование – это способ выделить набор значимых характеристик объекта, исключая из

рассмотрения незначимые.

Инкапсуляция

Инкапсуляция – это свойство системы, позволяющее объединить данные и методы,

работающие с ними, в классе и скрыть детали реализации от пользователя.

Наследование

Наследование – это свойство системы, позволяющее описать новый класс на основе уже

существующего с частично или полностью заимствующейся функциональностью. Класс, от

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

Новый класс – потомком, наследником или производным классом.

Полиморфизм

Полиморфизм – это свойство системы использовать объекты с одинаковым интерфейсом без

информации о типе и внутренней структуре объекта.

Page 3: Portfolio of recent projects of binary studio software php h.p..pdf · 2020-02-18 · Как и в случае с конструкторами, ... Объявление свойств

Binary Studio

URL: www.binary-studio.com e-mail: [email protected] Skype: Binary_Studio Phone: +38-062-206-84-61

UKRAINE | UK | SLOVAKIA B. Khmelnitskogo 40 of. 301, Donetsk, Ukraine

PPooddyyaacchhiihh HHeelleenn

33 |||| 1177

Абстра кция выделяет существенные характеристики некоторого объекта, отличающие его от

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

с точки зрения наблюдателя.

Cмысл абстракции состоит в том, что абстракция позволяет смотреть на объект , не заставляя

себя разобраться в той совокупности сложных частей из которых состоит данный объект.

Через абстракцию человек управляет сложностью.

Инкапсуля ция — свойство языка программирования, позволяющее пользователю не

задумываться о сложности реализации используемого программного компонента (то, что у

него внутри), а взаимодействовать с ним посредством предоставляемого интерфейса

(публичных методов и членов), а также объединить и защитить жизненно важные для

компонента данные. При этом пользователю предоставляется только спецификация

(интерфейс) объекта.

Пользователь может взаимодействовать с объектом только через этот интерфейс.

Реализуется с помощью ключевого слова: public.

Пользователь не может использовать закрытые данные и методы. Реализуется с помощью

ключевых слов: private, protected, internal.

Сокрытие реализации целесообразно применять в следующих случаях:

предельная локализация изменений при необходимости таких изменений,

прогнозируемость изменений (какие изменения в коде надо сделать для заданного

изменения функциональности) и прогнозируемость последствий изменений.

Насле дование — механизм объектно-ориентированного программирования, позволяющий

описать новый класс на основе уже существующего (родительского), при этом свойства и

функциональность родительского класса заимствуются новым классом.

Другими словами, класс-наследник реализует спецификацию уже существующего класса

(базовый класс). Это позволяет обращаться с объектами класса-наследника точно так же, как с

объектами базового класса.

Page 4: Portfolio of recent projects of binary studio software php h.p..pdf · 2020-02-18 · Как и в случае с конструкторами, ... Объявление свойств

Binary Studio

URL: www.binary-studio.com e-mail: [email protected] Skype: Binary_Studio Phone: +38-062-206-84-61

UKRAINE | UK | SLOVAKIA B. Khmelnitskogo 40 of. 301, Donetsk, Ukraine

PPooddyyaacchhiihh HHeelleenn

44 |||| 1177

Класс, от которого произошло наследование, называется базовым или родительским (англ.

base class). Классы, которые произошли от базового, называются потомками, наследниками

или производными классами (англ. derived class).

Полиморфи зм — возможность объектов с одинаковой спецификацией иметь различную

реализацию.

Например, реализация класса может быть изменена в процессе наследования.

Кратко смысл полиморфизма можно выразить фразой: «Один интерфейс, множество

реализаций».

Полиморфизм позволяет писать более абстрактные программы и повысить коэффициент

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

могут называть по-разному — интерфейс, класс. Общность имеет внешнее и внутреннее

выражение:

внешняя общность проявляется как одинаковый набор методов с одинаковыми именами и

сигнатурами (именем методов и типами аргументов и их количеством);

внутренняя общность — одинаковая функциональность методов. Её можно описать

интуитивно или выразить в виде строгих законов, правил, которым должны подчиняться

методы.

Page 5: Portfolio of recent projects of binary studio software php h.p..pdf · 2020-02-18 · Как и в случае с конструкторами, ... Объявление свойств

Binary Studio

URL: www.binary-studio.com e-mail: [email protected] Skype: Binary_Studio Phone: +38-062-206-84-61

UKRAINE | UK | SLOVAKIA B. Khmelnitskogo 40 of. 301, Donetsk, Ukraine

PPooddyyaacchhiihh HHeelleenn

55 |||| 1177

Конструкторы и деструкторы

PHP 5 позволяет объявлять методы-конструкторы. Классы, в которых объявлен метод-

констуктор, будут вызывать этот метод при каждом создании нового объекта, так что это

может оказаться полезным, например, для инициализации какого-либо состояния объекта

перед его использованием.

Замечание: Конструкторы в классах-родителях не вызываются автоматически, если класс-

потомок определяет собственный конструктор. Чтобы вызвать конструктор, объявленный в

родительском классе, следует обратиться к методу parent::__construct() внутри конструктора

класса-потомка.

PHP 5 предоставляет концепцию деструкторов, сходную с теми, что применяются в других ОО

языках, таких, как C++. Деструктор вызывается в том случае, когда освобождаются все ссылки

на определенный объект, объект явно удаляется или при завершении скрипта (деструкторы

будут вызваны в случайном порядке).

Как и в случае с конструкторами, деструкторы, объявленные в родительском классе, не будут

вызваны автоматически. Для вызова деструктора, объявленном в классе-родителе, следует

обратиться к методу parent::__destruct() в теле деструктора-потомка.

Деструктор будет вызван даже в том случае, если скрипт был остановлен с помощью функции

exit(). Вызов exit() в деструкторе предотвратит запуск всех последующих функций завершения.

Область видимости

Область видимости свойства или метода может быть определена путем использования

следующих ключевых слов в объявлении: public, protected или private. Доступ к свойствам и

методам классам, объявленным как public (общедоступный), может происходить из любого

места. Модификатор protected (защищенный) позволяет иметь доступ наследуемым и

родительским классам (а, также классу, в котором определен сам член класса). Модификатор

private (закрытый) ограничивает область видимости так, что только класс, где объявлен сам

элемент, имеет к нему доступ.

Область видимости свойств

Page 6: Portfolio of recent projects of binary studio software php h.p..pdf · 2020-02-18 · Как и в случае с конструкторами, ... Объявление свойств

Binary Studio

URL: www.binary-studio.com e-mail: [email protected] Skype: Binary_Studio Phone: +38-062-206-84-61

UKRAINE | UK | SLOVAKIA B. Khmelnitskogo 40 of. 301, Donetsk, Ukraine

PPooddyyaacchhiihh HHeelleenn

66 |||| 1177

Свойства и Методы класса должны быть определены через модификаторы public, private, или

protected.

Методы, где определение модификатора отсутствует, определяются как public.

Ключевое слово "static"

Объявление свойств и методов класса статическими позволяет обращаться к ним без

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

доступен посредством экземпляра класса (но статический метод может быть вызван).

Так как статические методы вызываются без создания экземпляра класса, то псевдо-

переменная $this не доступна внутри метода, объявленного статическим.

Доступ к статическим свойствам класса не может быть получен через оператор ->.

Начиная с версии PHP 5.3.0 существует возможность ссылаться на класс используя

переменную. Поэтому значение переменной в таком случае не может быть ключевым словом

(например, self, parent и static).

Page 7: Portfolio of recent projects of binary studio software php h.p..pdf · 2020-02-18 · Как и в случае с конструкторами, ... Объявление свойств

Binary Studio

URL: www.binary-studio.com e-mail: [email protected] Skype: Binary_Studio Phone: +38-062-206-84-61

UKRAINE | UK | SLOVAKIA B. Khmelnitskogo 40 of. 301, Donetsk, Ukraine

PPooddyyaacchhiihh HHeelleenn

77 |||| 1177

Абстрактные классы

PHP 5 поддерживает определение абстрактных классов и методов. Создавать экземпляр

класса, который был объявлен абстрактным, нельзя. Класс, в котором объявлен хотя бы один

абстрактный метод, должен также быть объявлен абстрактным. Методы, объявленные как

абстрактные, несут, по существу, лишь описательный смысл и не могут включать какой-либо

функционал.

При наследовании от абстрактного класса, все методы, помеченные абстрактными в

родительском классе должны быть определены в классе-потомке; кроме того, область

видимости этих методов должна совпадать (или быть менее строгой). Например, если

абстрактный метод объявлен как protected, то реализация этой функции должна быть либо

protected либо public, но никак не private.

Результат выполнения данного примера:

ConcreteClass1

FOO_ConcreteClass1

ConcreteClass2

FOO_ConcreteClass2

Интерфейсы объектов

Интерфейсы объектов позволяют создавать код, который указывает, какие методы и свойства

должен включать класс, без необходимости описывания их функционала.

Интерфейсы объявляются так же, как и обычные классы, но с использованием ключевого

слова "interface"; тела методов интерфейсов должны быть пустыми.

Все методы, определенные в интерфейсы должны быть публичными, что следует из самой

природы интерфейса.

implements

Page 8: Portfolio of recent projects of binary studio software php h.p..pdf · 2020-02-18 · Как и в случае с конструкторами, ... Объявление свойств

Binary Studio

URL: www.binary-studio.com e-mail: [email protected] Skype: Binary_Studio Phone: +38-062-206-84-61

UKRAINE | UK | SLOVAKIA B. Khmelnitskogo 40 of. 301, Donetsk, Ukraine

PPooddyyaacchhiihh HHeelleenn

88 |||| 1177

Для реализации интерфейса используется оператор implements. Класс должен реализовать

все методы, описанные в интерфейсе; иначе произойдет фатальная ошибка. При желании

классы могут реализовывать более одного интерфейса за раз, реализуемые интерфейсы

должны разделяться запятой.

Замечание:

Класс не может реализовать два интерфейса, содержащих одноименную функцию, так как это

повлечет за собой неоднозначность.

Замечание:

Интерфейсы могут быть унаследованы друг от друга, так же как и классы, с помощью

оператора extends.

Замечание:

Сигнатуры методов в классе, реализующем интерфейс, должны точно совпадать с

сигнатурами, используемыми в интерфейсе, в противном случае будет вызвана фатальная

ошибка.

Константы (Constants)

Интерфейсы могут содержать константы. Константы интерфейсов работают точно так же, как и

константы классов, за исключением того, что они не могут быть перекрыты наследующим

классом или интерфейсом.

Интерфейс, совместно с контролем типов, предоставляет отличный способ проверки того, что

определенный объект содержит определенный набор методов. Смотрите также оператор

instanceof и контроль типов.

Page 9: Portfolio of recent projects of binary studio software php h.p..pdf · 2020-02-18 · Как и в случае с конструкторами, ... Объявление свойств

Binary Studio

URL: www.binary-studio.com e-mail: [email protected] Skype: Binary_Studio Phone: +38-062-206-84-61

UKRAINE | UK | SLOVAKIA B. Khmelnitskogo 40 of. 301, Donetsk, Ukraine

PPooddyyaacchhiihh HHeelleenn

99 |||| 1177

Перегрузка

Перегрузка в PHP означает возможность динамически "создавать" свойства и методы. Эти

динамические сущности обрабатываются с помощью "волшебных" методов, которые можно

создать в классе для различных видов действий.

Методы перегрузки вызываются при взаимодействии с теми свойствами или методами,

которые не были объявлены или не видны в текущей области видимости.

Все методы перегрузки должны быть объявлены как public.

Замечание:

Ни один аргумент не может быть передан по ссылке в эти "волшебные" методы.

Замечание:

Интерпретация "перегрузки" в PHP отличается от остальных объектно-ориентированных

языков. Традиционно перегрузка означает возможность иметь множество одноименных

методов с разным количеством или различными типами аргументов.

Перегрузка свойств

Метод __set() будет выполнен при записи данных в недоступные свойства.

Метод __get() будет выполнен при чтении данных из недоступных свойств.

Метод __isset() будет выполнен при использовании isset() или empty() на недоступных

свойствах.

Метод __unset() будет выполнен при вызове unset() на недоступном свойстве.

Аргумент $name представляет собой имя вызываемого свойства. Метод __set() содержит

аргумент $value, представляющий собой значение, которое будет записано в свойство с

именем $name.

Page 10: Portfolio of recent projects of binary studio software php h.p..pdf · 2020-02-18 · Как и в случае с конструкторами, ... Объявление свойств

Binary Studio

URL: www.binary-studio.com e-mail: [email protected] Skype: Binary_Studio Phone: +38-062-206-84-61

UKRAINE | UK | SLOVAKIA B. Khmelnitskogo 40 of. 301, Donetsk, Ukraine

PPooddyyaacchhiihh HHeelleenn

1100 |||| 1177

Перегрузка свойств работает только в контексте объекта. Данные магические методы не будут

вызваны в статическом контексте. Поэтому данные методы не должны объявляться

статичными.

Замечание:

Невозможно использовать перегруженные свойства в других языковых конструкциях, кроме

isset(). Это означает, что если на перегруженном свойстве будет вызвана конструкция empty(),

то перегруженный метод не будет вызван.

Для обхода этого ограничения можно скопировать перегруженное свойство в локальную

переменную и затем применить к ней empty().

Перегрузка методов

mixed __call ( string $name , array $arguments )

mixed __callStatic ( string $name , array $arguments )

В контексте объекта при вызове недоступных методов вызывается метод __call().

В статическом контексте при вызове недоступных методов вызывается метод __callStatic().

Аргумент $name представляет собой имя вызываемого метода. Аргумент $arguments

представляет собой числовой массив, содержащий параметры, переданные в вызываемый

метод $name.

Результат выполнения данного примера:

Установка 'a' в '1'

Получение 'a'

1

Установлено ли 'a'?

bool(true)

Уничтожение 'a'

Page 11: Portfolio of recent projects of binary studio software php h.p..pdf · 2020-02-18 · Как и в случае с конструкторами, ... Объявление свойств

Binary Studio

URL: www.binary-studio.com e-mail: [email protected] Skype: Binary_Studio Phone: +38-062-206-84-61

UKRAINE | UK | SLOVAKIA B. Khmelnitskogo 40 of. 301, Donetsk, Ukraine

PPooddyyaacchhiihh HHeelleenn

1111 |||| 1177

Установлено ли 'a'?

bool(false)

1

Давайте поэкспериментируем с private свойством 'hidden':

Private свойства видны внутри класса, поэтому __get() не используется...

2

Private свойства не видны вне класса, поэтому __get() используется...

Получение 'hidden'

Notice: Неопределенное свойство в __get(): hidden в файле <file> на строке 70 в <file> на

строке 29

Результат выполнения данного примера:

Вызов метода 'runTest' в контексте объекта

Вызов статического метода 'runTest' в статическом контексте

Шаблоны проектирования

Шаблоны - это способ описания оптимальных методов и хороших дизайнов проектирования.

Они предоставляют универсальные пути решения общих проблем программирования.

Фабрика (Factory)

Шаблон Фабрика позволяет создавать объекты во время работы программы. Этот шаблон

называется Фабрикой потому, что он отвечает за производство объекта.

Параметризированная фабрика принимает в качестве аргумента имя класса, объект которого

создается.

Синглтон (Singleton)

Шаблон проектирования Синглтон применяется в тех ситуациях, когда нужно получить

единственный экземпляр класса. Большинство примеров, связанных с этим - это

Page 12: Portfolio of recent projects of binary studio software php h.p..pdf · 2020-02-18 · Как и в случае с конструкторами, ... Объявление свойств

Binary Studio

URL: www.binary-studio.com e-mail: [email protected] Skype: Binary_Studio Phone: +38-062-206-84-61

UKRAINE | UK | SLOVAKIA B. Khmelnitskogo 40 of. 301, Donetsk, Ukraine

PPooddyyaacchhiihh HHeelleenn

1122 |||| 1177

взаимодействие с базой данных. Реализация этого шаблона позволяют программисту создать

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

Магические методы

Имена методов __construct, __destruct (см. Конструкторы и деструкторы), __call, __callStatic,

__get, __set, __isset, __unset (см. Перегрузка), __sleep, __wakeup, __toString, __set_state и

__clone зарезервированы для "магических" методов в PHP. Не стоит называть свои методы

этими именами, если вы не хотите использовать их "магическую" функциональность.

Предостережение

PHP оставляет за собой право все методы, начинающиеся с __, считать "магическими". Не

рекомендуется использовать имена методов с __ в PHP, если вы не желаете использовать

соответствующий "магический" функционал.

__sleep и __wakeup

Функция serialize() проверяет, присутствует ли в вашем классе метод с "магическим" именем

__sleep. Если это так, то этот метод выполняется прежде любой операции сериализации. Он

может очистить объект и предполагается, что будет возвращен массив с именами всех

переменных объекта, который должен быть сериализован. Если метод ничего не возвращает

кроме NULL, то это значит, что объект сериализован и выдается предупреждение E_NOTICE.

Обычно __sleep используется для передачи ожидаемых данных или для выполнения обычных

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

сохранять очень большие объекты полностью.

С другой стороны, функция unserialize() проверяет наличие метода с "магическим" именем

__wakeup. Если такой имеется, то он может воссоздать все ресурсы объекта, которые тот

имеет.

Обычно __wakeup используется для восстановления любых соединений с базой данных,

которые могли быть потеряны во время операции сериализации и выполнения других

операций повторной инициализации.

Page 13: Portfolio of recent projects of binary studio software php h.p..pdf · 2020-02-18 · Как и в случае с конструкторами, ... Объявление свойств

Binary Studio

URL: www.binary-studio.com e-mail: [email protected] Skype: Binary_Studio Phone: +38-062-206-84-61

UKRAINE | UK | SLOVAKIA B. Khmelnitskogo 40 of. 301, Donetsk, Ukraine

PPooddyyaacchhiihh HHeelleenn

1133 |||| 1177

__toString

Метод __toString позволяет классу решать самостоятельно, как он должен реагировать при

преобразовании в строку.

__invoke

The __invoke method is called when a script tries to call an object as a function.

__set_state

Этот статический метод вызывается для тех классов, которые экспортируются функцией

var_export() начиная с PHP 5.1.0.

Параметр этого метода должен содержать массив, состоящий из экспортируемых свойств в

виде array('property' => value, ...).

Ключевое слово "final"

ключевое слово final, разместив которое перед объявлениями методов класса, можно

предотвратить их переопределение в дочерних классах. Если же сам класс определяется с

этим ключевым словом, то он не сможет быть унаследован.

Замечание: Свойства не могут быть объявлены окончательными, только классы и методы.

Клонирование объектов

Создание копии объекта с абсолютно идентичными свойствами не всегда является

приемлемым вариантом.

Копия объекта создается с использованием вызова clone (который вызывает метод __clone()

объекта, если это возможно).

Page 14: Portfolio of recent projects of binary studio software php h.p..pdf · 2020-02-18 · Как и в случае с конструкторами, ... Объявление свойств

Binary Studio

URL: www.binary-studio.com e-mail: [email protected] Skype: Binary_Studio Phone: +38-062-206-84-61

UKRAINE | UK | SLOVAKIA B. Khmelnitskogo 40 of. 301, Donetsk, Ukraine

PPooddyyaacchhiihh HHeelleenn

1144 |||| 1177

При клонировании объекта, PHP 5 выполняет неполную копию всех свойств объекта. Любые

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

По завершении клонирования, если у класса был определен метод __clone(), то он вызывается

у свежесозданной копии объекта, для возможного изменения всех необходимых свойств.

Page 15: Portfolio of recent projects of binary studio software php h.p..pdf · 2020-02-18 · Как и в случае с конструкторами, ... Объявление свойств

Binary Studio

URL: www.binary-studio.com e-mail: [email protected] Skype: Binary_Studio Phone: +38-062-206-84-61

UKRAINE | UK | SLOVAKIA B. Khmelnitskogo 40 of. 301, Donetsk, Ukraine

PPooddyyaacchhiihh HHeelleenn

1155 |||| 1177

Пространство имён

Нужно оно для того, что-бы не писать длинные префиксы к названиям классов.

Вместо этого классы, функции, интерфейсы (абстрактные классы) и константы могут быть

объединены в одно пространство имён. Глобальные переменные в это пространство не

входят.

Почему мы нуждаемся в пространстве имен?

Поскольку размер библиотеки Вашего PHP кода растет, возрастает и риск случайного

переопределения функции или имени класса, которые были объявлены ранее. Проблема

усугубляется, когда Вы пытаетесь добавлять сторонние компоненты или плагины; что будет,

если два или более наборов кода будут выполнять классы «Database» или «User»?

Ранее, единственным решением были длинные имена классов/функций. Например,

WordPress добавлял к каждому имени префикс «WP_». Zend Framework обычно дает детально

описывающие названия, что приводит к длиннющим именам классов, таким как

Zend_Search_Lucene_Analysis_Analyzer_Common_Text_CaseInsensitive.

Проблемы совпадения имен снимаются введением пространств имен. PHP константы, классы

и функции могут быть сгруппированы в библиотеки пространств имен (namespaced libraries).

Как определяются пространства имен?

По умолчанию, все имена констант, классов и функций размещены в глобальном

пространстве — как это и было до того, как PHP стал поддерживать пространства имен.

В коде, пространства имен определяются с помощью единственного слова namespace в самом

начале Вашего PHP файла. Это слово должно быть самой первой командой (за исключением

declare) и ни не-PHP код, ни HTML, ни даже пробел не должен предшествовать этой команде.

Page 16: Portfolio of recent projects of binary studio software php h.p..pdf · 2020-02-18 · Как и в случае с конструкторами, ... Объявление свойств

Binary Studio

URL: www.binary-studio.com e-mail: [email protected] Skype: Binary_Studio Phone: +38-062-206-84-61

UKRAINE | UK | SLOVAKIA B. Khmelnitskogo 40 of. 301, Donetsk, Ukraine

PPooddyyaacchhiihh HHeelleenn

1166 |||| 1177

Подпространства имен (Sub-namespaces)

PHP дает Вам возможность определять иерархию пространств имен таким образом, чтобы

библиотеки могли быть соподчинены друг другу. Получившиеся подпространства имен

разделяются с помощью обратных слэшей \, например:

MyProject\SubName

MyProject\Database\MySQL

CompanyName\MyProject\Library\Common\Widget1

Page 17: Portfolio of recent projects of binary studio software php h.p..pdf · 2020-02-18 · Как и в случае с конструкторами, ... Объявление свойств

Binary Studio

URL: www.binary-studio.com e-mail: [email protected] Skype: Binary_Studio Phone: +38-062-206-84-61

UKRAINE | UK | SLOVAKIA B. Khmelnitskogo 40 of. 301, Donetsk, Ukraine

PPooddyyaacchhiihh HHeelleenn

1177 |||| 1177

Model-View-Controller

Model-view-controller (MVC, «Модель-представление-поведение», «Модель-представление-

контроллер») — шаблон проектирования, в котором модель данных приложения,

пользовательский интерфейс и управляющая логика разделены на три отдельных компонента

так, что модификация одного из компонентов оказывает минимальное воздействие на

остальные.

Шаблон MVC позволяет разделить данные, представление и обработку действий

пользователя на три отдельных компонента:

Модель (Model). Модель предоставляет данные (обычно для View), а также реагирует на

запросы (обычно от контроллера), изменяя своё состояние.

Представление (View). Отвечает за отображение информации (пользовательский интерфейс).

Поведение (Controller). Интерпретирует данные, введённые пользователем, и информирует

модель и представление о необходимости соответствующей реакции.

Важно отметить, что как представление, так и поведение зависят от модели. Однако модель

не зависит ни от представления, ни от поведения. Это одно из ключевых достоинств

подобного разделения. Оно позволяет строить модель независимо от визуального

представления, а также создавать несколько различных представлений для одной модели.