2013-03-31 21 views
6

Warum kann PHP keinen spitzen Wert als globale Variable behalten?Kann eine globale PHP-Variable auf einen Zeiger gesetzt werden?

<?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 
?> 
+0

siehe diese Seite http://stackoverflow.com/questions/746224/are-there-pointers-in-php –

Antwort

4

VON PHP Manual:

Warnung

Wenn Sie in einer Funktion einen Verweis auf eine Variable global zuweisen erklärt, wird die Referenz nur innerhalb der Funktion sichtbar. Sie können dies vermeiden, indem Sie das Array $ GLOBALS verwenden.

...

Denken Sie global $ var; als eine Verknüpfung zu $ ​​var = & $ GLOBALS ['var'] ;. Wenn Sie also einen anderen Verweis auf $ var zuweisen, ändert sich nur die lokale Variable.

<?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 
?> 

Weitere Informationen finden Sie unter: What References Are Not und Returning References

0

PHP Zeiger nicht verwenden. Das Handbuch erklärt, was genau Referenzen sind, tun und nicht tun. Ihr Beispiel ist specificly hier angesprochen: http://www.php.net/manual/en/language.references.whatdo.php Um das zu erreichen, was Sie zu tun versuchen, Sie zu dem Array $ GLOBALS zurückgreifen müssen, wie so, wie sie in der Bedienungsanleitung beschrieben:

<?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 
?> 
0

In myfunc() Sie verwenden globale $ a, $ b, $ c.

Sie dann $ c = & $ a [0]

Die Referenz nur sichtbar innerhalb myfunc zuweisen ist().

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

„Denken Sie global $ var; als Verknüpfung zu $ ​​var = & GLOBALS $ [ 'var'] ;. So eine andere Verweis auf $ var Zuordnung ändert sich nur die lokale Referenz der Variablen. "

+0

@Ultimater und Akam haben es vor mir :) Prost –

Verwandte Themen