PHP 5传递类Object作为参数,它总是一个指针或副本或克隆?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP 5传递类Object作为参数,它总是一个指针或副本或克隆?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1731字,纯文字阅读大概需要3分钟。
内容图文
![PHP 5传递类Object作为参数,它总是一个指针或副本或克隆?](/upload/InfoBanner/zyjiaocheng/744/c8b62db10b9e4babab2b55426cfb49d6.jpg)
我有一个关于传递对象作为参数的问题.当我们传递一个变量时,它会创建一个副本,但看起来像对象总是一个引用指针,这是正确的吗?我已使用以下示例代码进行了测试:
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仍指向先前创建的对象.
顺便说说:
如果将函数定义更改为函数aa(& $o).现在它将再次输出Ipsum,因为$o是对$ob引用的引用:)
总结一下:
在PHP中,默认情况下,参数按值传递 – 如果它们是对象!但!在代码$ob = new StdClass;中,$ob是对象的引用.因此,默认情况下,我们将传递引用的副本.他们将指向相同的对象.但是如果你改变传递的变量($o = new StdClass;),$ob仍然指向同一个对象.这就是为什么在修改后给出的例子将输出Lorem.
您可以使用&符号(&)通过引用传递参数,但是对于对象,它通常是无用的.
内容总结
以上是互联网集市为您收集整理的PHP 5传递类Object作为参数,它总是一个指针或副本或克隆?全部内容,希望文章能够帮你解决PHP 5传递类Object作为参数,它总是一个指针或副本或克隆?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。