PHP:对象实例上的new运算符创建一个对象实例。为什么?

时间:2019-06-26 13:41:57

标签: 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)

1 个答案:

答案 0 :(得分:0)

PHP允许您从像这样的变量创建对象实例:

$a = 'Foo';
$b = new $class;

因此,当您使用new $var时,PHP将检查它是否是用于创建该类的新实例的字符串,并且如果它是一个对象,则它将检索该对象实例的类名并创建一个来自它的新实例。

如果您尝试对非字符串或非对象变量执行相同操作:

$a = 1;
$b = new $a;

这将产生一个错误:

  

PHP错误:类名必须是有效的对象或字符串

PHP 5.3.0引入了两种创建对象实例的新方法,这是您所提供的方案的一个示例:

class Test {}

$obj1 = new Test();
$obj2 = new $obj1;

有关更多信息:请阅读示例#5在 https://www.php.net/manual/en/language.oop5.basic.php#language.oop5.basic.new

下创建新对象