PHP:对象实例上的新操作符创建对象实例。为什么?
以下代码工作并生成给定结果的原因是什么。它是一种PHP刚刚支持的特殊语言结构吗?如果是,那是哪一个?或者它只是一个简单的php ismPHP:对象实例上的新操作符创建对象实例。为什么?,php,oop,new-operator,Php,Oop,New Operator,以下代码工作并生成给定结果的原因是什么。它是一种PHP刚刚支持的特殊语言结构吗?如果是,那是哪一个?或者它只是一个简单的php ism class Foo {}; $a = new Foo(); $b = new $a(); var_dump($a); // class Foo#1 (0) var_dump($b); // class Foo#2 (0) PHP允许您从如下变量创建对象实例: $a = 'Foo'; $b = new $a; 因此,当您使用new$a时,PHP将检查它是否
class Foo {};
$a = new Foo();
$b = new $a();
var_dump($a); // class Foo#1 (0)
var_dump($b); // class Foo#2 (0)
PHP允许您从如下变量创建对象实例:
$a = 'Foo';
$b = new $a;
因此,当您使用new$a
时,PHP将检查它是否是一个字符串,以生成类的新实例,如果它是一个对象,它将检索对象实例的类名并从中生成新实例
如果尝试对非字符串或非对象变量执行相同操作:
$a = 1;
$b = new $a;
这将生成一个错误:
PHP错误:类名必须是有效的对象或字符串
PHP 5.3.0引入了两种创建对象实例的新方法,这是您提供的场景示例:
class Test {}
$obj1 = new Test();
$obj2 = new $obj1;
更多信息:阅读示例#5在下创建新对象手册中提到,这是因为PHP 5.3提供的查看:示例#5创建新对象(在上面的链接中)问题不是关于示例,在哪里可以看到它们,问题是“为什么这样做”。10分钟内投5票?哇!这个问题似乎比我想象的要好得多……我认为某些特定语言功能的“为什么”已经脱离主题了,所以……你有没有链接到改变这一点的RFC?为什么它被添加到PHP中?为什么它有用?
$b=新的get\u类($a)代码>抛出一个致命错误。我肯定有一些语法错误。如果我将返回值存储在一个变量中,它会正常运行。@u\u mulder您确定您读到的答案不止一行吗?