6

为什么 PHP 不能将指向的值保留为全局变量?

<?php
   $a = array();
   $a[] = 'works';
   function myfunc () {
      global $a, $b ,$c;
      $b = $a[0];
      $c = &$a[0];
   }
   myfunc();
   echo '  $b '.$b; //works
   echo ', $c '.$c; //fails
?>
4

3 回答 3

4

来自PHP 手册

警告

如果您将引用分配给在函数内声明为全局的变量,则该引用将仅在函数内可见。您可以通过使用 $GLOBALS 数组来避免这种情况。

...

想想全局 $var; 作为 $var =& $GLOBALS['var']; 的快捷方式。因此,为 $var 分配另一个引用只会更改局部变量的引用。

<?php
$a=array();
$a[]='works';
function myfunc () {
global $a, $b ,$c;
$b= $a[0];
$c=&$a[0];
$GLOBALS['d'] = &$a[0];
}
myfunc();
echo '  $b '.$b."<br>"; //works
echo ', $c '.$c."<br>"; //fails
echo ', $d '.$d."<br>"; //works
?>

有关更多信息,请参阅: 哪些引用不是返回引用

于 2013-03-31T07:48:37.843 回答
0

PHP 不使用指针。该手册解释了确切的引用是什么,做什么和不做什么。您的示例在此处专门解决: http ://www.php.net/manual/en/language.references.whatdo.php 要实现您想要做的事情,您必须求助于 $GLOBALS 数组,就像这样,如手册解释:

<?php
$a=array();
$a[]='works';
function myfunc () {
global $a, $b ,$c;
$b= $a[0];
$GLOBALS["c"] = &$a[0];
}
myfunc();
echo '  $b '.$b; //works
echo ', $c '.$c; //works
?>
于 2013-03-31T07:50:01.940 回答
0

在 myfunc() 中,您使用全局 $a、$b、$c。

然后你分配 $c =& $a[0]

该引用仅在 myfunc() 中可见。

来源: http ://www.php.net/manual/en/language.references.whatdo.php

“将全局 $var; 视为 $var =& $GLOBALS['var']; 的快捷方式。因此,为 $var 分配另一个引用只会更改局部变量的引用。”

于 2013-03-31T07:55:05.397 回答