понедельник, 28 апреля 2008 г.

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

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

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

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

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

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

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

Здесь можно оставить свои комментарии.

Комментариев нет: