2013-03-31 21 views
6

PHP neden küresel bir değişken olarak sivri bir değeri tutmuyor? PHP Manual DANPHP genel değişkeni işaretçiye ayarlanabilir mi?

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

bu sayfaya bakın http://stackoverflow.com/questions/746224/are-there-pointers-in-php –

cevap

4

:

bir değişkene bir başvuru atarsanız

bir işlevin içinde global olarak ilan

Uyarı, gönderim sadece işlevin içinde görünür olur. , $ GLOBALS dizisini kullanarak bunu önleyebilirsiniz.

...

küresel $ var düşünün; $ var = & $ GLOBALS ['var']; 'a bir kısayol olarak. Böylece, $ var öğesine başka bir referans atamak sadece yerel değişkeninin referansını değiştirir.

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

Daha fazla bilgi için bkz: What References Are Not ve Returning References

0

PHP işaretçileri kullanmaz. El kitabı, referansların tam olarak ne olduğunu, ne yaptığını ve yapmadığını açıklar. Sizin örnek specificly burada ele alınmaktadır: http://www.php.net/manual/en/language.references.whatdo.php yapmaya çalışıyorsun ne elde etmek için, şöyle kılavuzda tarafından açıklandığı gibi, $ GLOBALS dizisi başvurmak gerekir: MyFunc olarak

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

() kullanmak global $ a, $ b, $ c.

Sonra $ c atamak = & $ a [0]

referans işlevim içinde sadece görülebilir().

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

"küresel $ var düşünün; sadece yerel değişkenin gönderimini değiştirir bir $ var kısayol = & $ GLOBALS [ 'var'] ;. Böylece $ var başka başvuru atamak gibi. "

+0

@Ultimater ve Akam benden önce aldı :) Şerefe –