PHP引用和共享变量
我有一个curl处理程序,但将展示标准类型变量的示例。这里有两个类,我想共享一个从第一类到第二类的变量作为引用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
<?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