Hướng dẫn php dynamic properties - thuộc tính động php

Tổng quan

Trong PHP, bạn chỉ có thể đặt thêm $ trước một biến để biến nó thành một biến động:

Nội phân chính

  • Sự khác biệt giữa PHP5 và PHP7
  • Trường hợp 1: $$ foo ['Bar'] ['Baz']]
  • Trường hợp 2: $ foo-> $ bar ['Baz']]
  • Trường hợp 3: $ foo-> $ bar ['Baz'] ()
  • Trường hợp 4: foo :: $ bar ['Baz'] ()
  • 5.5.3. Thảo luận

Nội phân chính

  • Sự khác biệt giữa PHP5 và PHP7
  • Trường hợp 1: $$ foo ['Bar'] ['Baz']]
  • Trường hợp 2: $ foo-> $ bar ['Baz']]
  • Trường hợp 3: $ foo-> $ bar ['Baz'] ()
  • Trường hợp 4: foo :: $ bar ['Baz'] ()
  • 5.5.3. Thảo luận
$$variableName = $value;

Trường hợp 1: $$ foo ['Bar'] ['Baz']]

$$$$$$$$DoNotTryThisAtHomeKids = $value;

Mặc dù tôi không giới thiệu nó, bạn thậm chí có thể xâu chuỗi hành vi này:

${$variableName} = $value;

Bạn có thể nhưng không bị buộc phải đặt $variableName giữa {}:

${$variableNamePart1 . $variableNamePart2} = $value;

Sử dụng {} chỉ là bắt buộc khi tên của biến của bạn tự nó là thành phần của nhiều giá trị, như thế này:

Sự khác biệt giữa PHP5 và PHP7

Trường hợp 1: $$ foo ['Bar'] ['Baz']]

Trường hợp 2: $ foo-> $ bar ['Baz']]

Trường hợp 1: $$ foo ['Bar'] ['Baz']]

  • Trường hợp 2: $ foo-> $ bar ['Baz']]
  • Trường hợp 3: $ foo-> $ bar ['Baz'] ()

Trường hợp 2: $ foo-> $ bar ['Baz']]

  • Trường hợp 3: $ foo-> $ bar ['Baz'] ()
  • Trường hợp 4: foo :: $ bar ['Baz'] ()

Trường hợp 3: $ foo-> $ bar ['Baz'] ()

  • Trường hợp 4: foo :: $ bar ['Baz'] ()
  • 5.5.3. Thảo luận

Trường hợp 4: foo :: $ bar ['Baz'] ()

  • 5.5.3. Thảo luận
  • Trường hợp 1: $$ foo ['Bar'] ['Baz']]

5.5.3. Thảo luận

Trường hợp 1: $$ foo ['Bar'] ['Baz']]

Mặc dù tôi không giới thiệu nó, bạn thậm chí có thể xâu chuỗi hành vi này:

$stooges = array('Moe','Larry','Curly');
$stooge_moe = 'Moses Horwitz';
$stooge_larry = 'Louis Feinberg';
$stooge_curly = 'Jerome Horwitz';

foreach ($stooges as $s) {
  print "$s's real name was ${'stooge_'.strtolower($s)}.\n";
}
Moe's real name was Moses Horwitz.
Larry's real name was Louis Feinberg.
Curly's real name was Jerome Horwitz.

Bạn có thể nhưng không bị buộc phải đặt $variableName giữa {}:

Sử dụng {} chỉ là bắt buộc khi tên của biến của bạn tự nó là thành phần của nhiều giá trị, như thế này:

for ($i = 1; $i <= $n; $i++) {
    $t = "title_$i";
    if ($title == $$t) { /* match */ }
}

Tuy nhiên, bạn nên luôn luôn sử dụng {}, bởi vì nó dễ đọc hơn.

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 một kết quả khác trong một số trường hợp.

Trong PHP7, các biến động, thuộc tính và phương pháp hiện sẽ được đánh giá nghiêm ngặt 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.

Php5 Interpetation:

$$$$$$$$DoNotTryThisAtHomeKids = $value;
2echo, print, unset(), isset(), empty(), include, require and the like. Utilize wrapper functions to make use of any of these constructs as variable functions.

Php7 Interpetation:

$$$$$$$$DoNotTryThisAtHomeKids = $value;
3

${$variableName} = $value;
0

${$variableName} = $value;
1

${$variableName} = $value;
2

Php5 Interpetation:

$$$$$$$$DoNotTryThisAtHomeKids = $value;
4

Php7 Interpetation:

$$$$$$$$DoNotTryThisAtHomeKids = $value;
5

${$variableName} = $value;
3

${$variableName} = $value;
4

${$variableName} = $value;
5

Php5 Interpetation:

$$$$$$$$DoNotTryThisAtHomeKids = $value;
6

Php7 Interpetation:

$$$$$$$$DoNotTryThisAtHomeKids = $value;
7

${$variableName} = $value;
6

${$variableName} = $value;
7

${$variableName} = $value;
8

Php5 Interpetation:

$$$$$$$$DoNotTryThisAtHomeKids = $value;
8

${$variableName} = $value;
9

Php7 Interpetation:

$$$$$$$$DoNotTryThisAtHomeKids = $value;
9

Ví dụ trước in 103. Bởi vì $ animal = 'rùa', động vật $$ là $ rùa, bằng 103.

${$variableNamePart1 . $variableNamePart2} = $value;
0

${$variableNamePart1 . $variableNamePart2} = $value;
1

${$variableNamePart1 . $variableNamePart2} = $value;
2

${$variableNamePart1 . $variableNamePart2} = $value;
3

${$variableNamePart1 . $variableNamePart2} = $value;
4

${$variableNamePart1 . $variableNamePart2} = $value;
5

${$variableNamePart1 . $variableNamePart2} = $value;
6

${$variableNamePart1 . $variableNamePart2} = $value;
7

Sử dụng niềng răng xoăn, bạn có thể xây dựng các biểu thức phức tạp hơn chỉ ra tên biến:

PHP đánh giá biểu thức giữa niềng răng xoăn và sử dụng nó như một tên biến. Biểu thức đó thậm chí có thể có các cuộc gọi chức năng trong đó, chẳng hạn như strtolower ().

${$variableNamePart1 . $variableNamePart2} = $value;
8

${$variableNamePart1 . $variableNamePart2} = $value;
9

${$variableNamePart1 . $variableNamePart2} = $value;
7

Các biến biến cũng hữu ích khi lặp qua các biến được đặt tên tương tự. Giả sử bạn đang truy vấn một bảng cơ sở dữ liệu có các trường có tên Title_1, Title_2, v.v. Nếu bạn muốn kiểm tra xem một tiêu đề có phù hợp với bất kỳ giá trị nào không, cách dễ nhất là lặp qua chúng như thế này:

Tất nhiên, sẽ đơn giản hơn khi lưu trữ các giá trị này trong một mảng, nhưng nếu bạn đang duy trì mã cũ sử dụng kỹ thuật này (và bạn không thể thay đổi nó), các biến biến là hữu ích.

$stooges = array('Moe','Larry','Curly');
$stooge_moe = 'Moses Horwitz';
$stooge_larry = 'Louis Feinberg';
$stooge_curly = 'Jerome Horwitz';

foreach ($stooges as $s) {
  print "$s's real name was ${'stooge_'.strtolower($s)}.\n";
}
Moe's real name was Moses Horwitz.
Larry's real name was Louis Feinberg.
Curly's real name was Jerome Horwitz.
1

$stooges = array('Moe','Larry','Curly');
$stooge_moe = 'Moses Horwitz';
$stooge_larry = 'Louis Feinberg';
$stooge_curly = 'Jerome Horwitz';

foreach ($stooges as $s) {
  print "$s's real name was ${'stooge_'.strtolower($s)}.\n";
}
Moe's real name was Moses Horwitz.
Larry's real name was Louis Feinberg.
Curly's real name was Jerome Horwitz.
2

$stooges = array('Moe','Larry','Curly');
$stooge_moe = 'Moses Horwitz';
$stooge_larry = 'Louis Feinberg';
$stooge_curly = 'Jerome Horwitz';

foreach ($stooges as $s) {
  print "$s's real name was ${'stooge_'.strtolower($s)}.\n";
}
Moe's real name was Moses Horwitz.
Larry's real name was Louis Feinberg.
Curly's real name was Jerome Horwitz.
3

Cú pháp nẹp xoăn cũng là cần thiết trong việc giải quyết sự mơ hồ về các yếu tố mảng. Biến biến $$ lừa $$ [12] có thể có hai ý nghĩa. Đầu tiên là "Lấy những gì trong phần tử thứ 12 của mảng lừa $ và sử dụng nó như một tên biến." Viết điều này là: $ {$ lừa [12]}. Thứ hai là, "Sử dụng những gì trong những con lừa $ vô hướng như một tên mảng và nhìn vào phần tử thứ 12 của mảng đó." Viết điều này là: $ {$ Donkeys} [12].

PHP hỗ trợ khái niệm các chức năng biến. Điều này có nghĩa là nếu một tên biến có dấu ngoặc đơn được thêm vào nó, PHP sẽ tìm kiếm một hàm có cùng tên với bất kỳ biến nào đánh giá và sẽ cố gắng thực hiện nó. Trong số những thứ khác, điều này có thể được sử dụng để thực hiện các cuộc gọi lại, bảng chức năng, v.v.

$stooges = array('Moe','Larry','Curly');
$stooge_moe = 'Moses Horwitz';
$stooge_larry = 'Louis Feinberg';
$stooge_curly = 'Jerome Horwitz';

foreach ($stooges as $s) {
  print "$s's real name was ${'stooge_'.strtolower($s)}.\n";
}
Moe's real name was Moses Horwitz.
Larry's real name was Louis Feinberg.
Curly's real name was Jerome Horwitz.
4

$stooges = array('Moe','Larry','Curly');
$stooge_moe = 'Moses Horwitz';
$stooge_larry = 'Louis Feinberg';
$stooge_curly = 'Jerome Horwitz';

foreach ($stooges as $s) {
  print "$s's real name was ${'stooge_'.strtolower($s)}.\n";
}
Moe's real name was Moses Horwitz.
Larry's real name was Louis Feinberg.
Curly's real name was Jerome Horwitz.
5

$stooges = array('Moe','Larry','Curly');
$stooge_moe = 'Moses Horwitz';
$stooge_larry = 'Louis Feinberg';
$stooge_curly = 'Jerome Horwitz';

foreach ($stooges as $s) {
  print "$s's real name was ${'stooge_'.strtolower($s)}.\n";
}
Moe's real name was Moses Horwitz.
Larry's real name was Louis Feinberg.
Curly's real name was Jerome Horwitz.
6

Sử dụng niềng răng xoăn, bạn có thể xây dựng các biểu thức phức tạp hơn chỉ ra tên biến:

Tất nhiên, sẽ đơn giản hơn khi lưu trữ các giá trị này trong một mảng, nhưng nếu bạn đang duy trì mã cũ sử dụng kỹ thuật này (và bạn không thể thay đổi nó), các biến biến là hữu ích.

$stooges = array('Moe','Larry','Curly');
$stooge_moe = 'Moses Horwitz';
$stooge_larry = 'Louis Feinberg';
$stooge_curly = 'Jerome Horwitz';

foreach ($stooges as $s) {
  print "$s's real name was ${'stooge_'.strtolower($s)}.\n";
}
Moe's real name was Moses Horwitz.
Larry's real name was Louis Feinberg.
Curly's real name was Jerome Horwitz.
7

$stooges = array('Moe','Larry','Curly');
$stooge_moe = 'Moses Horwitz';
$stooge_larry = 'Louis Feinberg';
$stooge_curly = 'Jerome Horwitz';

foreach ($stooges as $s) {
  print "$s's real name was ${'stooge_'.strtolower($s)}.\n";
}
Moe's real name was Moses Horwitz.
Larry's real name was Louis Feinberg.
Curly's real name was Jerome Horwitz.
8

$stooges = array('Moe','Larry','Curly');
$stooge_moe = 'Moses Horwitz';
$stooge_larry = 'Louis Feinberg';
$stooge_curly = 'Jerome Horwitz';

foreach ($stooges as $s) {
  print "$s's real name was ${'stooge_'.strtolower($s)}.\n";
}
Moe's real name was Moses Horwitz.
Larry's real name was Louis Feinberg.
Curly's real name was Jerome Horwitz.
9

for ($i = 1; $i <= $n; $i++) {
    $t = "title_$i";
    if ($title == $$t) { /* match */ }
}
0

for ($i = 1; $i <= $n; $i++) {
    $t = "title_$i";
    if ($title == $$t) { /* match */ }
}
1

for ($i = 1; $i <= $n; $i++) {
    $t = "title_$i";
    if ($title == $$t) { /* match */ }
}
2

for ($i = 1; $i <= $n; $i++) {
    $t = "title_$i";
    if ($title == $$t) { /* match */ }
}
3

for ($i = 1; $i <= $n; $i++) {
    $t = "title_$i";
    if ($title == $$t) { /* match */ }
}
4

Cú pháp nẹp xoăn cũng là cần thiết trong việc giải quyết sự mơ hồ về các yếu tố mảng. Biến biến $$ lừa $$ [12] có thể có hai ý nghĩa. Đầu tiên là "Lấy những gì trong phần tử thứ 12 của mảng lừa $ và sử dụng nó như một tên biến." Viết điều này là: $ {$ lừa [12]}. Thứ hai là, "Sử dụng những gì trong những con lừa $ vô hướng như một tên mảng và nhìn vào phần tử thứ 12 của mảng đó." Viết điều này là: $ {$ Donkeys} [12].

PHP hỗ trợ khái niệm các chức năng biến. Điều này có nghĩa là nếu một tên biến có dấu ngoặc đơn được thêm vào nó, PHP sẽ tìm kiếm một hàm có cùng tên với bất kỳ biến nào đánh giá và sẽ cố gắng thực hiện nó. Trong số những thứ khác, điều này có thể được sử dụng để thực hiện các cuộc gọi lại, bảng chức năng, v.v.

for ($i = 1; $i <= $n; $i++) {
    $t = "title_$i";
    if ($title == $$t) { /* match */ }
}
5

for ($i = 1; $i <= $n; $i++) {
    $t = "title_$i";
    if ($title == $$t) { /* match */ }
}
6

${$variableNamePart1 . $variableNamePart2} = $value;
7