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 语言参考吗?
答案 0 :(得分:0)
PHP 手册说:
<块引用>如果包含类名的字符串与 new 一起使用,将创建该类的新实例。
它确实可以以错误的方式解释(即使用字符串常量:new "Foo"
),但人们很快就会意识到你永远不会这样做。如果你指定一个常量字符串值,你也可以用传统的形式(new Foo
)来写,所以没有任何好处。
但是,能够使用保存字符串值的变量是一个优势,例如$className = "Foo"; new $className;
,因为它可以动态创建类名并实例化它们。任何人都不应滥用这种可能性,但它在某些情况下会派上用场。