替换$ in php变量声明

时间:2015-06-01 10:09:41

标签: php syntax bison abstract-syntax-tree

我想扩展php语法,以便区分可变和不可变的变量。

$a应声明为可变(如标准php中所示) 并且#b应该被声明为不可变的。

我已阅读Hacking PHP syntax

我无法弄清楚在哪里可以定义用#声明的变量也应该被标记为T_VARIABLE

2 个答案:

答案 0 :(得分:1)

我能够解决这个问题, 需要采取两个步骤:

PHP不解析'#'作为评论:

变化:

<ST_IN_SCRIPTING>"#"|"//" {

<ST_IN_SCRIPTING>"//" {

zend_language_scanner.l

中的第1901行

将标记#a标记为变量:

变化:

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); }
;

zend_language_parser.y

的第1117行

就是这样

现在这段代码有效:

#a=1;
echo (#a);//1

答案 1 :(得分:-2)

我的第一个猜测是看你是否可以在你的项目的php.ini文件中更改它,但是没有一个选项可以让你改变符号。 http://php.net/manual/en/ini.list.php

我最好的猜测是你需要查看实际的PHP代码库或询问PHP社区是否会为你添加此功能。