为什么可以从一个字符串变量实例化一个类,但不是PHP中的一个字符
发布时间:2020-12-13 16:25:39 所属栏目:PHP教程 来源:网络整理
导读:PHP的工作原理如何: $myClass = 'AppMyClass';$object = new $myClass; 但这会导致错误: $myClass = 'MyClass';$object = new 'App'.$myClass; 在第二个示例中,抛出了一个意外的T_CONSTANT_ENCAPSED_STRING. 事实证明,上述例子是因为operator precedenc
PHP的工作原理如何:
$myClass = 'AppMyClass'; $object = new $myClass; 但这会导致错误: $myClass = 'MyClass'; $object = new 'App'.$myClass; 在第二个示例中,抛出了一个意外的T_CONSTANT_ENCAPSED_STRING. 事实证明,上述例子是因为operator precedence,因为新的最高优先级,但… 同样,我可以尝试用一个字符串进行实例化,如: $object = new 'AppMyClass'; 抛出相同的错误.为什么是这样?
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: 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,$3); } | new_variable T_OBJECT_OPERATOR property_name { $$= zend_ast_create(ZEND_AST_PROP,$3); } | class_name T_PAAMAYIM_NEKUDOTAYIM simple_variable { $$= zend_ast_create(ZEND_AST_STATIC_PROP,$3); } | new_variable T_PAAMAYIM_NEKUDOTAYIM simple_variable { $$= zend_ast_create(ZEND_AST_STATIC_PROP,$3); } // Copyright (c) 1998-2015 Zend Technologies Ltd.,the Zend license 2.00 这是为什么你不能在那里有字符串表达式. (它从未被扩展,因为简单的实例和$classvarnames通常是足够的,所以允许的语法大体上与PHP3相同,当它被介绍时). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |