PHP引用和共享变量

时间:2016-01-25 20:50:22

标签: php class reference

我有一个curl处理程序,但会在标准类型变量上显示示例。这里有两个类,我想分享从第一类到第二类的一个变量作为参考。

<?php
class first
{
    private $a=10;
    private $b='cos'; 

    public function SendData()
    {
        $data = array(
            'first' => &$this->a,
            'second' => $this->b
        );

        return $data;
    }

    public function GetA() { return $this->a; }
    public function GetB() { return $this->b; }
}

class second
{
    private $a;
    private $b; 

    public function __construct($data)
    {
        $this->a = $data['first'];
        $this->b = $data['second'];
    }

    public function GetA() { return $this->a; }
    public function GetB() { return $this->b; }
    public function Change($i) { $this->a = $i; }
}

$f = new first();
$s = new second($f->SendData());

echo $f->GetA() . " " . $f->GetB() . PHP_EOL;
echo $s->GetA() . " " . $s->GetB() . PHP_EOL;
$s->Change(123);
echo $f->GetA() . " " . $f->GetB() . PHP_EOL;
echo $s->GetA() . " " . $s->GetB() . PHP_EOL;
?>

输出如下:

10 cos 
10 cos 
10 cos 
123 cos

我的问题是 - 如何像C中的指针那样做,当我调用第二个::更改($ i)函数时我想先改变:: $ a value,所以输出就像:

10 cos 
10 cos 
123 cos 
123 cos

1 个答案:

答案 0 :(得分:0)

您需要做的是创建一个通过引用返回的函数。您已在first中有一个函数返回$this->a,但该函数返回值而不是引用。您可以通过在方法名称&之前放置public function &GetA(并在调用脚本$a = &$first->GetA() //gets reference to $this->a in first中的方法之前实现此目的。

但在此之前,您需要在first课程中获取second课程的实例。现在我们提到了这一点,你有三个选择:

  1. 声明一个包含first实例作为全局
  2. 的变量
  3. 将变量作为参数传递给second::change()
  4. 首先制作一个单例类,它始终返回相同的实例
  5. 最容易做的是选项1,但如果你做了很多事情,我不建议这样做。选项3是最佳选择,应尽可能始终完成。如果您没有使用该类的数十个文件,则可以轻松实现选项2。

    如果您已经实现了一种方法,可以为second提供first个实例,您可以在second::change()函数中通过引用获取变量,并将该变量更改为新值。< / p>

    参考:

    3v4l.org simple get by reference https://3v4l.org/i6X5L

    3v4l.org类样本通过引用获得(使用全局)https://3v4l.org/iL2Qf