2013-03-31 25 views
6

Tại sao PHP không thể giữ một giá trị như một biến toàn cầu?Biến toàn cục PHP có thể được đặt thành con trỏ không?

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

xem trang này http://stackoverflow.com/questions/746224/are-there-pointers-in-php –

Trả lời

4

TỪ PHP Manual:

Cảnh báo

Nếu bạn gán một tham chiếu đến một biến khai báo toàn cầu bên trong một hàm , tham chiếu sẽ chỉ hiển thị bên trong hàm. Bạn có thể tránh điều này bằng cách sử dụng mảng $ GLOBALS.

...

Hãy suy nghĩ về $ var toàn cầu; dưới dạng lối tắt đến $ var = & $ GLOBALS ['var'] ;. Do đó việc gán một tham chiếu khác cho $ var chỉ thay đổi tham chiếu của biến địa phương .

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

Để biết thêm thông tin xem: What References Are NotReturning References

0

PHP không sử dụng con trỏ. Tài liệu hướng dẫn giải thích chính xác tham chiếu là gì, làm và không làm. Ví dụ của bạn được giải quyết specificly đây: http://www.php.net/manual/en/language.references.whatdo.php Để đạt được những gì bạn đang cố gắng để làm, bạn phải dùng đến mảng $ GLOBALS, như vậy, như được giải thích bởi hướng dẫn:

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

Trong myfunc() bạn sử dụng toàn cầu $ a, $ b, $ c.

Sau đó bạn gán $ c = & $ a [0]

Các tham chiếu là chỉ có thể nhìn thấy bên trong myfunc().

Nguồn: http://www.php.net/manual/en/language.references.whatdo.php

"Hãy suy nghĩ về $ var toàn cầu; như một phím tắt đến $ var = & $ GLOBALS [ 'var'] ;. Do đó gán một tham chiếu đến $ var chỉ thay đổi tài liệu tham khảo các biến địa phương. "

+0

@Ultimater và Akam đã nhận nó trước tôi :) Chúc mừng –

Các vấn đề liên quan