加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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仍指向先前创建的对象.

顺便说说:
如果将函数定义更改为函数aa(& $o).现在它将再次输出Ipsum,因为$o是对$ob引用的引用:)

总结一下:
在PHP中,默认情况下,参数按值传递 – 如果它们是对象!但!在代码$ob = new StdClass;中,$ob是对象的引用.因此,我们将传递引用的副本.他们将指向相同的对象.但是如果你改变传递的变量($o = new StdClass;),$ob仍然指向同一个对象.这就是为什么在修改后给出的例子将输出Lorem.

您可以使用&符号(&)通过引用传递参数,但是对于对象,它通常是无用的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读