Я хотел бы продлить php
синтаксис, чтобы отличить изменчивые и неизменные переменные.
$a
должен быть объявлен изменяемым (как в стандартном php)
а также #b
должен быть объявлен неизменным.
я прочел Взлом PHP-синтаксиса,
и я не мог понять, где я могу определить, что переменные объявлены с #
также следует маркировать как T_VARIABLE
?
Я смог решить эту проблему,
Необходимо сделать два шага:
Изменить:
<ST_IN_SCRIPTING>"#"|"//" {
к
<ST_IN_SCRIPTING>"//" {
По линии 1901 г. zend_language_scanner.l
Изменить:
simple_variable:
T_VARIABLE { $$ = $1; }
| '$' '{' expr '}' { $$ = $3; }
| '$' simple_variable { $$ = zend_ast_create(ZEND_AST_VAR, $2); }
;
Для того, чтобы:
simple_variable:
T_VARIABLE { $$ = $1; }
| '$' '{' expr '}' { $$ = $3; }
| '$' simple_variable { $$ = zend_ast_create(ZEND_AST_VAR, $2); }
| '#' '{' expr '}' { $$ = $3; }
| '#' simple_variable { $$ = zend_ast_create(ZEND_AST_VAR, $2); }
;
В строке 1117 из zend_language_parser.y
Теперь этот код работает:
#a=1;
echo (#a);//1
Моим первым предположением было посмотреть, сможете ли вы изменить это в своем файле php.ini для своего проекта, однако нет опции, позволяющей изменить знак. http://php.net/manual/en/ini.list.php
Моим лучшим предположением будет то, что вам нужно будет изучить реальную базу PHP-кода или спросить сообщество PHP, добавят ли они эту функцию для вас.