Tổng quat
Trong PHP, bạn chỉ có thể đặt một phần bổ sung $
trước một biến để biến nó thành một biến động:
$$variableName = $value;
Mặc dù tôi không khuyến nghị nhưng bạn thậm chí có thể xâu chuỗi hành vi này:
$$$$$$$$DoNotTryThisAtHomeKids = $value;
Bạn có thể nhưng không bị buộc phải đặt $variableName
giữa {}
:
${$variableName} = $value;
Việc sử dụng {}
chỉ bắt buộc khi tên biến của bạn là một thành phần của nhiều giá trị, như sau:
${$variableNamePart1 . $variableNamePart2} = $value;
Tuy nhiên, luôn luôn nên sử dụng {}
vì nó dễ đọc hơn.
Sự khác biệt giữa PHP5 và PHP7
Một lý do khác để luôn luôn sử dụng {}
, đó là PHP5 và PHP7 có cách xử lý các biến động hơi khác nhau, dẫn đến kết quả khác nhau trong một số trường hợp.
Trong PHP7, các biến động, thuộc tính và phương thức động bây giờ sẽ được đánh giá đúng theo thứ tự từ trái sang phải, trái ngược với sự pha trộn của các trường hợp đặc biệt trong PHP5. Các ví dụ dưới đây cho thấy thứ tự đánh giá đã thay đổi như thế nào.
Trường hợp 1 : $$foo['bar']['baz']
- Sự can thiệp của PHP5:
${$foo['bar']['baz']}
- Sự can thiệp của PHP7:
${$foo}['bar']['baz']
Trường hợp 2: $foo->$bar['baz']
- Sự can thiệp của PHP5:
$foo->{$bar['baz']}
- Sự can thiệp của PHP7:
$foo->{$bar}['baz']
Trường hợp 3: $foo->$bar['baz']()
- Sự can thiệp của PHP5:
$foo->{$bar['baz']}()
- Sự can thiệp của PHP7:
$foo->{$bar}['baz']()
Trường hợp 4: Foo::$bar['baz']()
- Sự can thiệp của PHP5:
Foo::{$bar['baz']}()
- Sự can thiệp của PHP7:
Foo::{$bar}['baz']()