Распознанный текст, спецсимволы и формулы могут содержать ошибки, поэтому с корректным вариантом рекомендуем ознакомиться на отсканированных изображениях учебника выше
Также, советуем воспользоваться поиском по сайту, мы уверены, что вы сможете найти больше информации по нужной Вам тематике
15.14. Замечания по объектной терминологии в PHP
Как правило, в каждой отдельной специализированной отрасли существует своя специфическая терминология: у программистов своя, путешественников — другая, у физиков — третья. Так и в объектно-ориентированном мире одни и те же концепции часто описываются разными словами. Что касается терминологии РНР, то ее можно сравнить с терминологией языка и C++.
Например, объекты часто называются экземплярами классов, а методы этих объектов — методами экземпляров. Поля данных, относящихся к каждому объекту, часто называются данными Экземпляров или атрибутами объектов, а поля данных, общие для всех членов класса, — данными класса, атрибутами класса или статическими переменными класса.
Термины «базовый класс» и «суперкласс» описывают одно и то же понятие (родитель или другой предокв иерархии наследования), атермины «производный класс» и «субкласс» описывают противоположное отношение (непосредственный или отдаленный потомок в иерархии наследования).
Программисты на C++ используют статические методы, виртуальные методы и методы экземпляров, но РНР поддерживает только методы классов и методы объектов. В действительности в РНР существует только общее понятие «метод». Принадлежность метода к классу или объекту определяется исключительно контекстом использования. Метод класса (со строковым аргументом) можно вызвать для объекта (с аргументом-ссылкой), но вряд ли это приведет к разумному результату.
Программисты C++ привыкли к глобальным (т. е. существующим на уровне класса) конструкторам (constructor) и деструкторам (destructor). Конструкторы — это члены классов, используемые для создания объектов-экземпляров классов. Есть несколько разновидностей конструкторов, в их числе естьдовольно своеобразные, но основное их назначение в любом случае одно и то же: обеспечение удобного спроса создания объекта-экземпляра класса. Деструкторы выполняют работу, обратную той, что проделывают конструкторы. Хотя класс может иметь несколько конструкторов, но деструктор может быть только один. В РНР конструкторы и деструкторы подчиняются тем же правилам.
С позиции C++ все методы РНР являются виртуальными. По этой причине их аргументы никогда не проверяются на соответствие прототипам функций, как это можно сделать для встроенных и пользовательских функций. Прототипы проверяются компилятором во время компиляции. Функция, вызванная методом, определятся лишь во время выполнения.
В своих объектно-ориентированных аспектах РНР предоставляет полную свободу выбора: возможность делать одни и те же вещи несколькими способами (приведение позволяет создать объект из данных любого типа), возможности модификации классов, написанныхдругими (добавление функций в их пакеты), атакже полная возможность превратить отладку программы в сущий ад — если вам это сильно захочется.
В менее гибких языках программирования обычно устанавливаются более жесткие ограничения. Многие языки с фанатичным упорством отстаивают закрытость данных, проверку типов на стадии компиляции, сложные сигнатуры функций и другие возможности. Все эти возможности отсутствуют в объектах РНР, поскольку они вообще не поддерживаются РНР. Помните об этом, если объектно-ориентированные аспекты РНР покажутся вам странными. Все странности происходят лишь оттого, что вы привыкли кдругим языкам. Объектно-ориентированная сторона РНР абсолютно разумна, если мыслить категориями РНР.