替换 php 变量声明中的 $

replace the $ in php variable declaration

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

$a 应该声明为可变的(与标准 php 一样) #b 应该声明为不可变的。

我读过Hacking PHP syntax,

我不知道在哪里可以定义用 # 声明的变量也应该标记为 T_VARIABLE ?

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

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

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

使 PHP 不解析 '#' 作为注释:

变化:

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

<ST_IN_SCRIPTING>"//" {

第 1901 行 zend_language_scanner.l

#a 标记为变量:

变化:

simple_variable:
T_VARIABLE { $$ = ; }
| '$' '{' expr '}' { $$ = ; }
| '$' simple_variable { $$ = zend_ast_create(ZEND_AST_VAR, ); }
;

收件人:

simple_variable:
T_VARIABLE { $$ = ; }
| '$' '{' expr '}' { $$ = ; }
| '$' simple_variable { $$ = zend_ast_create(ZEND_AST_VAR, ); }
| '#' '{' expr '}' { $$ = ; }
| '#' simple_variable { $$ = zend_ast_create(ZEND_AST_VAR, ); }
;

zend_language_parser.y

的第 1117 行

就是这样

现在这段代码可以工作了:

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