PHP引用和共享变量

PHP引用和共享变量,php,class,reference,Php,Class,Reference,我有一个curl处理程序,但将展示标准类型变量的示例。这里有两个类,我想共享一个从第一类到第二类的变量作为引用 <?php class first { private $a=10; private $b='cos'; public function SendData() { $data = array( 'first' => &$this->a, 'second' =&g

我有一个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;
?>
我的问题是-如何像C中的指针一样执行,当我调用第二个::Change($i)函数时,我也想先更改::$a值,所以输出如下:

10 cos 
10 cos 
123 cos 
123 cos

您需要做的是创建一个通过引用返回的函数。您已经在
first
中有一个函数返回
$this->a
,但该函数返回值,而不是通过引用。您可以通过将
&
放在方法名
公共函数&GetA(
之前,以及在脚本中调用方法之前,
$a=&$first->GetA()//在first
中获取对$this->a的引用来实现这一点

但是在此之前,您需要在
第二个
类中获取
第一个
类的实例。现在我们已经提到了,您有三个选项:

  • 将包含第一个
  • 实例的变量声明为全局变量
  • 将变量作为参数传递给
    second::change()
  • 将第一个类设为singleton类,该类始终返回相同的实例
  • 最简单的方法是选择1,尽管我不建议你做很多事情。选择3是最好的选择,如果可能的话应该一直做。如果你没有几十个使用该类的文件,选择2是可以很容易实现的

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

    参考:

    3v4l.org简单参考获取


    3v4l.org类示例通过引用获取(使用全局)

    您确实不能,因为第一个::$a是一个私有变量。
    second
    无法到达
    first
    内部来处理该值。您需要
    first
    中的某些内容来返回该引用,这意味着
    first
    需要更改。
    10 cos 
    10 cos 
    123 cos 
    123 cos