PHP:对象实例上的 new 运算符创建一个对象实例。为什么?
PHP: new operator on an object instance creates an object instance. Why?
以下代码工作并生成给定结果的原因是什么。它是 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 的新实例,如果它是一个对象,它将检索class 对象实例的名称并从中创建一个新实例。
如果您尝试对 non-string 或 non-object 变量执行相同的操作:
$a = 1;
$b = new $a;
这会产生一个错误:
PHP Error: Class name must be a valid object or a string
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
下创建新对象
以下代码工作并生成给定结果的原因是什么。它是 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 的新实例,如果它是一个对象,它将检索class 对象实例的名称并从中创建一个新实例。
如果您尝试对 non-string 或 non-object 变量执行相同的操作:
$a = 1;
$b = new $a;
这会产生一个错误:
PHP Error: Class name must be a valid object or a string
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
下创建新对象