PHP 5传递类Object作为参数,它总是一个指针或副本或克隆?
发布时间:2020-12-13 21:50:22 所属栏目:PHP教程 来源:网络整理
导读:我有一个关于传递对象作为参数的问题.当我们传递一个变量时,它会创建一个副本,但看起来像对象总是一个引用指针,这是正确的吗?我已使用以下示例代码进行了测试: class Base { private $var; function set ($var) { $this-var = $var; } function show () {
我有一个关于传递对象作为参数的问题.当我们传递一个变量时,它会创建一个副本,但看起来像对象总是一个引用指针,这是正确的吗?我已使用以下示例代码进行了测试:
class Base { private $var; function set ($var) { $this->var = $var; } function show () { echo $this->var,'<br>'; } } class Car { private $obj; function __construct($obj) { $this->obj = $obj; } function set ($var) { $this->obj->set($var); } function show() { $this->obj->show(); } } class Bus { private $obj; function __construct($obj) { $this->obj = $obj; } function set ($var) { $this->obj->set($var); } function show() { $this->obj->show(); } } 并通过运行 $base = new Base(); $base->set('one'); $base->show(); // one $bus = new Bus($base); $bus->show(); // one $car = new Car($base); $car->set('two'); $car->show(); // two $base->show(); // two $bus->show(); // two 显示结果为: one one two two two 因此,即使将参数作为参数传递给函数或其他类,也可以在任何地方更改Base类的变量,这会影响所有这些变量,这是否意味着它总是指向同一个对象作为指针? 谢谢. 解决方法
在PHP中当您将object作为参数传递时,它是引用的副本.所以:
$ob = new StdClass; $ob->var = "Lorem"; function aa($o) { $o->var="Ipsum"; } echo $ob->var; 这将输出Ipsum,但如果您将其他对象分配给该$o引用: function aa($o) { $o = new StdClass; $o->var="Ipsum"; } 它将输出Lorem – 因为$ob仍指向先前创建的对象. 顺便说说: 总结一下: 您可以使用&符号(&)通过引用传递参数,但是对于对象,它通常是无用的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |