Defineclass
Определение пользовательского класса и операторов | |
Файл в таком формате определяет пользовательский класс:
@CLASS
имя_класса
# необязательно
@USE
файл_с_родительским классом
# необязательно
@BASE
имя_родительского_класса
# так рекомендуется называть метод-конструктор класса
@create[параметры]
# далее следуют определения методов класса
@method1[параметры]
…
Модуль можно подключить (см. «Подключение модулей») к произвольному файлу - там появится возможность использования определенного здесь класса.
Если не указать @CLASS, файл определит ряд дополнительных операторов.
Если определен метод…
@auto[]
…он будет выполнен автоматически при загрузке класса как статический метод (так называемый статический конструктор). Используется для инициализации статических полей (переменных) класса.
Примечание: результат работы метода игнорируется - никуда не попадает.
У метода auto может быть объявлен параметр:
@auto[filespec]
В этом параметре Parser передаст полное имя файла, содержащего метод.
В Parser создаваемые классы наследуют методы классов, от которых были унаследованы. Унаследованные методы можно переопределить.
В том случае, когда в качестве родительского класса выступает другой пользовательский класс, необходимо подключить модуль, в котором он находится, а также объявить класс базовым (@BASE).
Для того, чтобы пользоваться методами и полями родительских классов, необходимо использовать следующие конструкции:
^класс:метод[параметры] - вызов метода родительского класса (примечание: хотя такой синтаксис вызова метода и похож на синтаксис вызова статического метода, фактически, в случае динамического метода, происходит динамический вызов метода родительского класса), для обращения к своему ближайшему родительскому классу (базовому классу) можно использовать конструкции ^BASE::конструктор[параметры] и ^BASE:метод[параметры].
Работа с переменными в статических методах
Поиск значения переменной происходит в:
· | в списке локальных переменных; |
· | в текущем классе или его родителях. |
Работа с переменными в динамических методах
Поиск значения переменной происходит в:
· | в списке локальных переменных; |
· | в текущем объекте и его классе; |
· | в родительских объектах и их классах. |
Примечание: старайтесь всячески избегать использования полей класса не из методов класса, кроме простейших случаев! По-возможности, общайтесь с объектом только через его методы.
Системное поле класса: CLASS
$имя_класса:CLASS - хранит ссылку на класс объекта.
Это удобно при задании контекста компиляции кода (см. «process. Компиляция и исполнение строки».
По этой ссылке также доступны статические поля класса, пример:
@main[]
^method[$cookie:CLASS]
@method[storage]
$storage.field
Этот код напечатает значение $cookie:field.
Copyright © 1997?2004 Art. Lebedev Studio | http://www.artlebedev.ru | Дата обновления: 01.04.2004 |