PHP 引用和共享变量


PHP reference and sharing variables

我有一个 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 中的指针一样做到这一点,当我调用 second::Change($i) 函数时,我也想先更改::$a 值,所以输出会像:

10 cos 
10 cos 
123 cos 
123 cos

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

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

  1. 将包含 first 实例的变量声明为全局
  2. 变量
  3. 将变量作为参数传递给second::change()
  4. 首先创建一个单例类,该类始终返回相同的实例

最简单的方法是选项 1,尽管如果您做很多事情,我不建议这样做。选项 3 是最佳选择,如果可能,应始终这样做。选项 2 是您可以使用的选项,如果您没有数十个使用该类的文件,则可以轻松实现。

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

参考:

3v4l.org 简单的引用获取 https://3v4l.org/i6X5L

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