2015-06-01 3 views
7

Ich möchte die php Syntax erweitern, um veränderbare und unveränderliche Variablen zu unterscheiden.

$a sollte als veränderbar deklariert werden (wie in Standard-PHP) und #b sollten unveränderlich erklärt werden.

ich Hacking PHP syntax gelesen habe,

und ich konnte nicht herausfinden, wo kann ich festlegen, dass mit # deklarierten Variablen sollte auch als T_VARIABLE Token aufgeteilt werden?

+0

Diese scheinen vielversprechend: [zend_language_parser.y] (https://github.com/php/php-src/blob/438d17e74e3ed7c4c8356a894057200d3b62f425/Zend/zend_language_parser.y#L1117), [Suche nach 'T_Variable'] (https://github.com/php/php-src/search?utf8=%E2%9C%93&q=T_Variable&type=Code) – Kobi

+6

Beachten Sie, dass # auch ein Kommentarzeichen in PHP ist ... Gibt es einen Grund, warum Sie das umsetzen wollen? Wäre nicht eine unveränderliche Variable in den meisten Fällen wie eine Definition? – EJTH

+0

Eine unveränderbare Variable verhält sich nicht wie 'php's' define() ', da Sie ihren Wert mehrmals setzen können, aber Sie können ihren Wert nicht ändern. beispiel '# a = array (1,2); # a = array (1,3);' gültig ist, wohingegen '# a = array (1,2); # a [1] = 3; ' ist nicht. –

Antwort

1

konnte ich dieses Problem lösen, müssen Zwei Schritte unternommen werden:

PHP Stellen nicht '#' als Kommentare analysieren:

Wechsel:

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

Um

<ST_IN_SCRIPTING>"//" { 

In Zeile 1901 in zend_language_scanner.l

tokenize #a als Variable:

Wechsel:

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

An:

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

In Zeile 1117 von zend_language_parser.y

Das ist es

ist

Jetzt dieser Code funktioniert:

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

Meine erste Vermutung war zu sehen, ob Sie dies in Ihrer php.ini-Datei für Ihr Projekt ändern könnten, aber es gibt keine Option, mit der Sie das Zeichen ändern können.

Meine beste Vermutung wäre, dass Sie in der tatsächlichen PHP-Code-Basis suchen oder die PHP-Community fragen müssen, ob sie diese Funktion für Sie hinzufügen würden.

+1

Darum fragt er: Wo kann man das in der PHP-Code-Basis ändern? – Barmar

Verwandte Themen