PHP语法在
zend_language_parser.y中定义,并不会为
new运算符定义任何更复杂的表达式:
new_expr:
T_NEW class_name_reference ctor_arguments
{ $$= zend_ast_create(ZEND_AST_NEW, $2, }
| T_NEW anonymous_class
{ $$= $2; }
class_name_reference:
class_name { $$= $1; }
| new_variable { $$= $1; }
而new_variable允许一组有限的变量表达式:
new_variable:
simple_variable
{ $$= zend_ast_create(ZEND_AST_VAR, $1); }
| new_variable '[' optional_expr ']'
{ $$= zend_ast_create(ZEND_AST_DIM, $1, $3); }
| new_variable '{' expr '}'
{ $$= zend_ast_create(ZEND_AST_DIM, $1, $3); }
| new_variable T_OBJECT_OPERATOR property_name
{ $$= zend_ast_create(ZEND_AST_PROP, $1, $3); }
| class_name T_PAAMAYIM_NEKUDOTAYIM simple_variable
{ $$= zend_ast_create(ZEND_AST_STATIC_PROP, $1, $3); }
| new_variable T_PAAMAYIM_NEKUDOTAYIM simple_variable
{ $$= zend_ast_create(ZEND_AST_STATIC_PROP, $1, $3); }
// Copyright (c) 1998-2015 Zend Technologies Ltd., the Zend license 2.00
这是为什么你不能在那里有字符串表达式. (它从未被扩展,因为简单的实例和$classvarnames通常是足够的,所以允许的语法大体上与PHP3相同,当它被介绍时).