Chúng ta biết rằng PHP sử dụng quy ước thêm tiền tố "$" vào tên biến. PHP cũng có quy định cho phép khai báo các biến động bằng cách thêm hai ký hiệu đô la ($$) vào tên. Một biến biến (hoặc một biến động) có thể được thiết lập và sử dụng một cách động.
Khai báo một biến bình thường như sau −
$a = 'good';
Một biến động có thể nhận giá trị của một biến bình thường và coi giá trị đó như là tên của biến. Trong ví dụ trên, "good" có thể được sử dụng làm tên của một biến bằng cách sử dụng hai dấu đô la "$$".
$$a = 'morning';
Chúng ta hiện có hai biến: "$a" có nội dung là "good" và "$$a" có nội dung là "morning". Do đó, các câu lệnh echo sau đây sẽ tạo ra cùng một kết quả −
echo "$a {$$a}"; echo "$a $good";
Cả hai đều sản xuất cùng một đầu ra −
good morning
Hãy xem xét điều này example −
<?php $a = 'good'; $$a = 'morning'; echo "$a {$$a}\n"; echo "$a $good"; ?>
Nó sẽ sản xuất output −
good morning good morning
Hãy cùng xem một ví dụ khác −
<?php $x = "foo"; $$x = "bar"; echo "Value of x = " .$x . "\n"; echo 'Value of $$x = ' . $$x . "\n"; echo 'Value of foo = ' . $foo; ?>
Ở đây, bạn sẽ nhận được output −
Value of x = foo Value of $$x = bar Value of foo = bar
Lưu ý rằng việc sử dụng ký hiệu "$" không bị giới hạn ở hai. Có thể thêm bất kỳ số lượng ký hiệu đô la nào ở phía trước.
Giả sử có một biến "$x" với giá trị là "a". Tiếp theo, chúng ta định nghĩa $$x='as', thì "$$x" cũng như "$a" sẽ có cùng giá trị. Tương tự, câu lệnh $$$x='and' thực sự khai báo một biến "$as" có giá trị là 'and'.
Dưới đây là một ví dụ hoàn chỉnh cho thấy việc sử dụng nhiều ký hiệu "$".
<?php $php = "a"; $lang = "php"; $World = "lang"; $Hello = "World"; $a = "Hello"; echo '$a= ' . $a; echo "\n"; echo '$$a= ' . $$a; echo "\n"; echo '$$$a= ' . $$$a; echo "\n"; echo '$$$$a= ' . $$$$a; echo "\n"; echo '$$$$$a= ' . $$$$$a; ?>
Khi bạn chạy đoạn mã này, nó sẽ tạo ra output −
$a= Hello $$a= World $$$a= lang $$$$a= php $$$$$a= a
Việc sử dụng biến động với mảng có thể dẫn đến một số tình huống mơ hồ. Với một mảng "a", 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 đang đề cập đến "$a[1]" như một biến hay bạn muốn "$$a" như là biến và sau đó là chỉ mục [1] từ biến đó.
Để giải quyết sự mơ hồ này, hãy sử dụng ${$a[1]} cho trường hợp đầu tiên và ${$a}[1] cho trường hợp thứ hai.
Hãy xem xét ví dụ sau đây −
<?php $vars = array("hw", "os", "lang"); $var_hw="Intel"; $var_lang="PHP"; $var_os="Linux"; foreach ($vars as $var) echo ${"var_$var"} . "\n"; print "$var_hw\n$var_os\n$var_lang"; ?>
Nó sẽ sản xuất output −
Intel Linux PHP Intel Linux PHP
Cần lưu ý rằng kỹ thuật này không thể được sử dụng với các mảng Superglobal của PHP (Nhiều biến được định nghĩa sẵn trong PHP là "superglobals", có nghĩa là chúng có sẵn trong tất cả các phạm vi trong suốt một tập lệnh) bên trong các hàm hoặc phương thức của lớp. Biến "$this" là một biến đặc biệt trong PHP và không thể được tham chiếu một cách động.