2013-03-31 13 views
6

Dlaczego PHP nie może utrzymywać wskazanej wartości jako zmiennej globalnej?Czy zmienna globalna PHP może być ustawiona na wskaźnik?

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

zobacz tę stronę http://stackoverflow.com/questions/746224/are-there-pointers-in-php –

Odpowiedz

4

OD PHP Manual:

Ostrzeżenie

Jeśli przypisać referencję do zmiennej globalnej zadeklarowane wewnątrz funkcji, odniesienie będzie widoczny tylko wewnątrz funkcji. Ty możesz uniknąć tego poprzez użycie tablicy $ GLOBALS.

...

Pomyśl o globalnej $ var; jako skrót do $ var = & $ GLOBALS ['var'] ;. Tym samym przypisanie innego odniesienia do zmiennej $ var zmienia tylko lokalne odwołanie do zmiennej o numerze .

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

Aby uzyskać więcej informacji, patrz: What References Are Not i Returning References

0

PHP nie używać wskaźników. Podręcznik wyjaśnia, czym dokładnie są referencje, co robią i czego nie robią. Twój przykład jest skierowana specificly tutaj: http://www.php.net/manual/en/language.references.whatdo.php Aby osiągnąć to, co staramy się robić, trzeba uciekać się do tablicy $ GLOBALS, jak tak, jak wyjaśniono w podręczniku:

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

W myfunc() użyć globalne $ a, $ b, $ c.

Następnie przypisać $ c = & $ A [0]

Odniesienie jest widoczny tylko wewnątrz myfunc().

Źródło: http://www.php.net/manual/en/language.references.whatdo.php

„Pomyśl o globalnej $ var; jako skrót do $ var = & $ GLOBALS [ 'var'] ;. Zatem przypisywanie innego odniesienia do $ var zmienia tylko odniesienie lokalnej zmiennej. "

+0

@Ultimater i Akam dostali to przede mną :) Pozdrawiam –

Powiązane problemy