Главная > Программирование > РНР: настольная книга программиста
<< Предыдущий параграф
Следующий параграф >>
<< Предыдущий параграф Следующий параграф >>
Макеты страниц

15.14. Замечания по объектной терминологии в PHP

Как правило, в каждой отдельной специализированной отрасли существует своя специфическая терминология: у программистов своя, путешественников — другая, у физиков — третья. Так и в объектно-ориентированном мире одни и те же концепции часто описываются разными словами. Что касается терминологии РНР, то ее можно сравнить с терминологией языка и C++.

Например, объекты часто называются экземплярами классов, а методы этих объектов — методами экземпляров. Поля данных, относящихся к каждому объекту, часто называются данными Экземпляров или атрибутами объектов, а поля данных, общие для всех членов класса, — данными класса, атрибутами класса или статическими переменными класса.

Термины «базовый класс» и «суперкласс» описывают одно и то же понятие (родитель или другой предокв иерархии наследования), атермины «производный класс» и «субкласс» описывают противоположное отношение (непосредственный или отдаленный потомок в иерархии наследования).

Программисты на C++ используют статические методы, виртуальные методы и методы экземпляров, но РНР поддерживает только методы классов и методы объектов. В действительности в РНР существует только общее понятие «метод». Принадлежность метода к классу или объекту определяется исключительно контекстом использования. Метод класса (со строковым аргументом) можно вызвать для объекта (с аргументом-ссылкой), но вряд ли это приведет к разумному результату.

Программисты C++ привыкли к глобальным (т. е. существующим на уровне класса) конструкторам (constructor) и деструкторам (destructor). Конструкторы — это члены классов, используемые для создания объектов-экземпляров классов. Есть несколько разновидностей конструкторов, в их числе естьдовольно своеобразные, но основное их назначение в любом случае одно и то же: обеспечение удобного спроса создания объекта-экземпляра класса. Деструкторы выполняют работу, обратную той, что проделывают конструкторы. Хотя класс может иметь несколько конструкторов, но деструктор может быть только один. В РНР конструкторы и деструкторы подчиняются тем же правилам.

С позиции C++ все методы РНР являются виртуальными. По этой причине их аргументы никогда не проверяются на соответствие прототипам функций, как это можно сделать для встроенных и пользовательских функций. Прототипы проверяются компилятором во время компиляции. Функция, вызванная методом, определятся лишь во время выполнения.

В своих объектно-ориентированных аспектах РНР предоставляет полную свободу выбора: возможность делать одни и те же вещи несколькими способами (приведение позволяет создать объект из данных любого типа), возможности модификации классов, написанныхдругими (добавление функций в их пакеты), атакже полная возможность превратить отладку программы в сущий ад — если вам это сильно захочется.

В менее гибких языках программирования обычно устанавливаются более жесткие ограничения. Многие языки с фанатичным упорством отстаивают закрытость данных, проверку типов на стадии компиляции, сложные сигнатуры функций и другие возможности. Все эти возможности отсутствуют в объектах РНР, поскольку они вообще не поддерживаются РНР. Помните об этом, если объектно-ориентированные аспекты РНР покажутся вам странными. Все странности происходят лишь оттого, что вы привыкли кдругим языкам. Объектно-ориентированная сторона РНР абсолютно разумна, если мыслить категориями РНР.

<< Предыдущий параграф Следующий параграф >>
Оглавление