对象创建规范的语法?

时间:2021-04-21 12:51:25

标签: php token

PHP 使用关键字 new 创建给定类的实例。 PHP手册中的描述似乎比较模糊,不清楚这里允许使用什么语法。哪些标记/表达式可以传递给 new

class Foo {}

// using class identifier obviously works
new Foo();  // => Foo{#2574}
// ... including omitting parens for constructor arguments as optional 
new Foo;    // => Foo{#2577}

// passing class name in a string (mentioned in manual) however fails
new "Foo";
new "Foo()";
new "Foo"();
// => PHP Parse error: Syntax error, unexpected T_CONSTANT_ENCAPSED_STRING

// passing class name in a string works only indirectly, through a variable (why?)
$className = "Foo";
new $className;    // Foo {#2580}

// other expressions resulting in *string* value also does not seem to work
function getFoo() {return "Foo";}
new (getFoo());
// => PHP Error:  syntax error, unexpected '(', expecting ';'

允许 new 的所有可能语法是什么? 是否有一些 PHP 语法参考,其中详细描述了这个和其他核心语言结构?喜欢 Python 语言参考吗?

1 个答案:

答案 0 :(得分:0)

PHP 手册说:

<块引用>

如果包含类名的字符串与 new 一起使用,将创建该类的新实例。

它确实可以以错误的方式解释(即使用字符串常量:new "Foo"),但人们很快就会意识到你永远不会这样做。如果你指定一个常量字符串值,你也可以用传统的形式(new Foo)来写,所以没有任何好处。

但是,能够使用保存字符串值的变量是一个优势,例如$className = "Foo"; new $className;,因为它可以动态创建类名并实例化它们。任何人都不应滥用这种可能性,但它在某些情况下会派上用场。

相关问题