class A {
public $a;
public function foo() {
$b = array("a", "b");
$this->a = &$b;
}
}
что случится?
$b
это pointer
для array
и когда функция foo()
выходов, $b
исчезает, а массив остается там?
Если массив также исчезает, $a
потеряет ссылку на это.
Кто-нибудь может объяснить это для меня?
Я думаю, что вы имеете в виду что-то вроде этого:
И да, вы можете! Здесь вы назначаете array $b
в качестве ссылки на $a
и изменить $b
, Тогда вы выводите $a
и это так же, как изменилось $b
!
<?php
class A {
public $a;
function foo() {
$b = array("a", "b");
$this->a = &$b;
$b[] = "c";
print_r($b);
unset($b);
print_r($b);
print_r($this->a);
}
function foo2() {
print_r($this->a);
}
}
$test = new A();
$test->foo();
$test->foo2();
?>
Выход:
Array ( [0] => a [1] => b [2] => c ) //$b
Notice: Undefined variable: b in C:\xampp\htdocs\Testing\index.php on line 27 //after unset $b
Array ( [0] => a [1] => b [2] => c ) //$a from the function foo
Array ( [0] => a [1] => b [2] => c ) //$a from the function foo2
ОБНОВЛЕНИЕ после комментария:
(с глобальной переменной)
<?php
global $c;
$c = 42;
$d = &$c;
$c = 2;
unset($c);
echo $d;?>
Выход:
2
Других решений пока нет …