如何使用“new”运算符使用另一个对象引用而不是类名来创建新对象?看看 $b 是如何创建的...$a 是对对象的引用。
代码示例:
class test {
function aaa() {echo "aaa";}
}
$a = new test();
$b = new $a();
$b->aaa();
最佳答案
$a = new Foo;
$b = new $a;
这只是一个速记符号,意思是创建一个与$a
相同的类的新对象是一个实例。它不是克隆或复制或其他任何东西。
这是同一种速记:
$foo = new Foo;
echo $foo::BAR;
使用类常量的“正确”语法是 Foo::BAR
,但是 $foo
指的是类,所以使用 $foo: :BAR
是一个方便的速记。事实上,不仅如此,它还通过允许您的对象实例被替换以及您的代码动态引用这些替换中可能被重写的常量来启用多态性。 new $foo
是同一类东西,它允许您动态实例化类,而不必确切知道那是什么类。
这不一定是好的想法,但它有时可能很有用。
这些机制是在 PHP 5.3 中引入的:http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.new
关于带有对象引用的 PHP new 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24904281/