PHP全局变量可以设置为指针吗?

时间:2013-03-31 07:35:04

标签: php pointers global

为什么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
?>

3 个答案:

答案 0 :(得分:4)

FROM PHP Manual

  

警告

     

如果为a中声明为global的变量分配引用   函数,只有函数内部才能看到引用。您   可以通过使用$ GLOBALS数组来避免这种情况。

...

  

考虑全球$ var;作为$ var =&amp;的快捷方式$ GLOBALS [ '变种'] ;.   因此,为$ 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
?>

有关更多信息,请参阅: What References Are NotReturning References

答案 1 :(得分: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
?>

答案 2 :(得分:0)

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

然后你分配$ c =&amp; $ A [0]

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

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

“考虑全局$ var;作为$ var =&amp; $ GLOBALS ['var'];的快捷方式。因此,为$ var指定另一个引用只会更改局部变量的引用。”