我有一个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
答案 0 :(得分:0)
您需要做的是创建一个通过引用返回的函数。您已在first
中有一个函数返回$this->a
,但该函数返回值而不是引用。您可以通过在方法名称&
之前放置public function &GetA(
并在调用脚本$a = &$first->GetA() //gets reference to $this->a in first
中的方法之前实现此目的。
但在此之前,您需要在first
课程中获取second
课程的实例。现在我们提到了这一点,你有三个选择:
first
实例作为全局second::change()
最容易做的是选项1,但如果你做了很多事情,我不建议这样做。选项3是最佳选择,应尽可能始终完成。如果您没有使用该类的数十个文件,则可以轻松实现选项2。
如果您已经实现了一种方法,可以为second
提供first
个实例,您可以在second::change()
函数中通过引用获取变量,并将该变量更改为新值。< / p>
参考:
3v4l.org simple get by reference https://3v4l.org/i6X5L
3v4l.org类样本通过引用获得(使用全局)https://3v4l.org/iL2Qf