Язык скриптования сайтов Parser 3

       

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

Содержание раздела