之间有什么区别
$obj1 = new Test();
$obj2 = new $obj1;
和
$obj1 = new Test();
$obj2 = new Test();
两者都为对象创建不同的内存位置。 它有什么不同......?
答案 0 :(得分:1)
$obj2 = new $obj1;
像这样使用$obj2 = $obj1;
你有两个变量引用同一个Test实例。
但是这里
$obj1 = new Test();
$obj2 = new Test();
你有两个变量引用两个不同的Test实例。
答案 1 :(得分:1)
虽然没有功能差异,但您可能应该尝试限制使用第一个,因为您不知道$obj1
内部可能存在什么。
在这两种情况下,您都可以传递参数,而$obj2
是与$obj1
具有相同类类型的单独对象。
当new $obj1
具有Test
方法时,可能会出现与__toString
格式的混淆。在这种情况下,即使__toString
语法的通常情况是new $var()
是已生成或传入的字符串,也不会调用$var
方法。
答案 2 :(得分:0)
在第一个示例中,您是否尝试将$ obj2设置为$ obj1的引用?如果是这样,你不应该使用new关键字,否则它将尝试创建一个存储在$ obj1变量中的类型的新对象。
创建对同一对象的两个引用:
$obj1 = new Test();
$obj2 = $obj1;//Creates a reference to the first object