Блог веб-разработчика: в помощь программистам

Оценка степени поддержки ООП в PHP

? Единичное наследование

Язык РНР обеспечивает наследование определения класса от другого класса с использованием конструкции extends. Наследуются и переменные экземпляра, и методы.

? Множественное наследование

Язык РНР не поддерживает множественное наследование, и в нем не реализовано так же понятие наследования интерфейса, как в языке Лача. Каждый класс может наслед вать свои определения не больше чем от одного родительского класса (хотя класс может применяться для реализации нескольких интерфейсов).

? Конструкторы

Каждый класс может иметь одну функцию-конструктор, которая в языке РНР носит имя __construct(). Обратите внимание на то, что перед именем функции стоят два символа подчеркивания. В версиях, предшествующих РНР5 (в которых применялось ядро Zend Engine 1), функция-конструктор класса имела такое же имя, как и класс, поэтом в языке РНР все еще допускается (но не рекомендуется) применять такой способ именования конструктора для обеспечения обратной совместимости. Конструктор родительского класса не вызывается автоматически, но должен быть вызван явно.
? Деструкторы
С версии РНР5 язык РНР поддерживает явно заданные деструкторы. Функция-деструктора класса всегда носит имя __destruct().
? Управление инкапсуляцией и доступом
Начиная с версии РНР5, язык РНР поддерживает открытые (public), закрытые (private и защищенные protected) переменные экземпляра и методы.
? Полиморфизм и перегрузка
Язык РНР поддерживает полиморфизм в том смысле, что позволяет использовать вместо экземпляров родительского класса экземпляры подкласса. Ввод в действие требуемого метода осуществляется на этапе прогона. Поддержка перегрузки методов, при которой ввод метода в действие осуществляется с учетом сигнатуры метода, отсутствует.Дело в том, что в каждом классе может присутствовать только один метод с определенным именем. Но благодаря тому, что в языке РНР применяется слабая типизация и поддерживается переменное количество параметров, появляется возможность обойти это ограничение.
? Сравнение раннего и позднего связывания
На вопрос о том, применяется ли в языке РНР раннее или позднее связывание, можно дать два в равной степени одинаково правильных ответа: во-первых, этот вопрос не может возникнуть, поскольку в языке РНР не применяется строгая типизация, и, во-вторых все операции связывания являются поздними. В языке РНР значения являются типизированными, а переменные — нет, поэтому в отличие от многих других языков программирования не возникает вопрос о том, какой метод должен быть вызван, если переменная имеет тип, отличный от ее значения.
? Статические функции (или функции класса)
Начиная с версии РНР5, язык РНР предоставляет возможность использовать статические переменные и статические методы. Существует также возможность вызывать методы с помощью синтаксической конструкции Classname::function().
? Самодиагностика
Язык РНР предоставляет широкий перечень функций самодиагностики, в частности, он позволяет выявлять имена классов, имена методов и имена переменных экземпляра с помощью диагностирования полученного экземпляра.

You can follow any responses to this entry through the RSS 2.0 feed.