Trong ngôn ngữ PHP, $[ký hiệu đô la] được sử dụng để lưu trữ dữ liệu biến. $$ có thể được sử dụng để lưu trữ một biến của một biến. Dữ liệu được lưu trữ trong $ là cố định trong khi dữ liệu được lưu trữ trong $$[ký hiệu đô la kép] có thể được thay đổi linh hoạt
Như là
- $x đại diện cho một biến
- $$x đại diện cho một biến có nội dung là $x
ví dụ 1
";
echo $$x."
";
echo $php;
?>
________số 8
Trong ví dụ trên, chúng ta đã gán giá trị cho biến var là Hello Giá trị của biến tham chiếu $$var được gán là World
Đôi khi thật tiện lợi khi có thể có tên biến thay đổi. Đó là, một tên biến có thể được đặt và sử dụng động. Một biến bình thường được đặt với một câu lệnh như
Một biến biến lấy giá trị của một biến và coi đó là tên của một biến. Trong ví dụ trên, xin chào, có thể được sử dụng làm tên biến bằng cách sử dụng hai ký hiệu đô la. tôi. e
Tại thời điểm này, hai biến đã được xác định và lưu trữ trong cây biểu tượng PHP. $a với nội dung "hello" và $hello với nội dung "world". Vì vậy, tuyên bố này
tạo ra đầu ra chính xác giống như
i. e. cả hai đều sản xuất. Chào thế giới
Để sử dụng biến biến với mảng, bạn phải giải quyết vấn đề nhập nhằng. Nghĩa là, nếu bạn viết $$a[1] thì trình phân tích cú pháp cần biết liệu bạn có định sử dụng $a[1] làm biến hay bạn muốn $$a làm biến và sau đó chỉ mục [1] từ . Cú pháp để giải quyết sự mơ hồ này là. ${$a[1]} cho trường hợp đầu tiên và ${$a}[1] cho trường hợp thứ hai
Thuộc tính lớp cũng có thể được truy cập bằng cách sử dụng tên thuộc tính biến. Tên thuộc tính biến sẽ được giải quyết trong phạm vi mà cuộc gọi được thực hiện. Chẳng hạn, nếu bạn có một biểu thức chẳng hạn như $foo->$bar, thì phạm vi cục bộ sẽ được kiểm tra cho $bar và giá trị của nó sẽ được sử dụng làm tên của thuộc tính $foo. Điều này cũng đúng nếu $bar là truy cập mảng
Dấu ngoặc nhọn cũng có thể được sử dụng để phân định rõ ràng tên thuộc tính. Chúng hữu ích nhất khi truy cập các giá trị trong một thuộc tính có chứa một mảng, khi tên thuộc tính được tạo thành từ nhiều phần hoặc khi tên thuộc tính chứa các ký tự không hợp lệ [e. g. từ json_decode[] hoặc SimpleXML]
Ví dụ #1 Ví dụ về thuộc tính biến
class foo {
var $bar = 'I am bar.';
var $arr = array['I am A.', 'I am B.', 'I am C.'];
var $r = 'I am r.';
}
Ví dụ trên sẽ xuất ra
Tôi là quán bar.
Tôi là quán bar.
Tôi là quán bar.
Tôi là r.
Cảnh báo
Xin lưu ý rằng các biến biến không thể được sử dụng với các mảng Superglobal của PHP trong các hàm hoặc phương thức lớp. Biến
4 cũng là một biến đặc biệt không thể tham chiếu độngRasmus Lerdorf, cha đẻ của ngôn ngữ PHP, giải thích dấu
5 là khả năng chèn các biến vào bên trong các giá trị chuỗi ký tự [nội suy], để các biến được phân biệt với phần còn lại của chuỗi. Ký hiệu đô la trước các biến trong PHP được lấy cảm hứng từ Perl, Perl đã ảnh hưởng lớn đến PHP trong những năm đầu của nóNhiều ngôn ngữ lập trình khác cũng sử dụng ký hiệu đô la trong cú pháp của chúng. Biểu tượng này được gọi là “sigil” và đơn giản hóa phép nội suy
Những tên không có tiền tố là
5 được coi là hằng số, hàm, tên lớp, v.v.Việc sử dụng Sigil đơn giản hóa phép nội suy biến thành chuỗi
7Một cú pháp chẳng hạn như
8 được gọi là Biến biếnVí dụ: nếu bạn xem xét phần mã này
$real_variable = 'test';
$name = 'real_variable';
echo $$name;
Bạn sẽ nhận được đầu ra sau
test
Nơi đây
- 9 chứa
0$real_variable = 'test'; $name = 'real_variable'; echo $$name;
1 chứa tên biến của bạn.$real_variable = 'test'; $name = 'real_variable'; echo $$name;
2$real_variable = 'test'; $name = 'real_variable'; echo $$name;
3 có nghĩa là "biến có tên chứa trong _______ 21"$real_variable = 'test'; $name = 'real_variable'; echo $$name;
- Đó là 9
- Và có giá trị
0$real_variable = 'test'; $name = 'real_variable'; echo $$name;
CHỈNH SỬA sau nhận xét của @Jhonny
Đang thực hiện
test
3?Chà, cách tốt nhất để biết là thử ;-]
Vì vậy, hãy thử phần mã này
$real_variable = 'test';
$name = 'real_variable';
$name_of_name = 'name';
echo $name_of_name . '
';
echo $$name_of_name . '
';
echo $$$name_of_name . '
';
Và đây là kết quả tôi nhận được
name
real_variable
test
Vì vậy, tôi sẽ nói rằng, vâng, bạn có thể làm
test
3 ;-]