Gán cùng một giá trị cho nhiều biến cùng một lúc?


115

Làm cách nào tôi có thể gán cùng một giá trị cho nhiều biến trong PHP cùng một lúc?

Tôi có một cái gì đó như:

$var_a = 'A';
$var_b = 'A';
$same_var = 'A';
$var_d = 'A';
$some_var ='A';

Trong trường hợp của tôi, tôi không thể đổi tên tất cả các biến để có cùng một tên (điều đó sẽ giúp mọi thứ dễ dàng hơn), vậy có cách nào để gán cùng một giá trị cho tất cả các biến theo cách nhỏ gọn hơn nhiều không?

Câu trả lời:


248
$var_a = $var_b = $same_var = $var_d = $some_var = 'A';

Tuyệt vời, làm việc hoàn hảo cho tôi $ level1 = $ level2 = $ level3 = $ level4 = false;
geilt

1
Có giới hạn nào không?
dipi evil

9
Điều này không thể được sử dụng trong lớp Php và đây là kiểu thô.
Chaminda Bandara

@ChamindaBandara ý bạn là gì, nó không thể được sử dụng trong một lớp PHP?
Eoin

4
@Eoin: Trong thực tế $var_a = $var_b = ... = new Class();, tất cả các biến sẽ tham chiếu đến cùng một trường hợp của Class.
Tim Cooper

1

Để thêm vào câu trả lời khác.

$a = $b = $c = $d thực sự có nghĩa là $a = ( $b = ( $c = $d ) )

PHP chuyển các kiểu nguyên thủy int, string, etc.theo giá trị và các đối tượng theo tham chiếu theo mặc định.

Điều đó có nghĩa là

$c = 1234;
$a = $b = $c;
$c = 5678;
//$a and $b = 1234; $c = 5678;

$c = new Object();
$c->property = 1234;
$a = $b = $c;
$c->property = 5678;
// $a,b,c->property = 5678 because they are all referenced to same variable

Tuy nhiên, bạn cũng CÓ THỂ chuyển các đối tượng theo giá trị bằng cách sử dụng từ khóa clone, nhưng bạn sẽ phải sử dụng dấu ngoặc đơn.

$c = new Object();
$c->property = 1234;
$a = clone ($b = clone $c);
$c->property = 5678;
// $a,b->property = 1234; c->property = 5678 because they are cloned

NHƯNG, bạn KHÔNG THỂ chuyển các kiểu nguyên thủy bằng cách tham chiếu với từ khóa & bằng phương pháp này

$c = 1234;

$a = $b = &$c; // no syntax error
// $a is passed by value. $b is passed by reference of $c

$a = &$b = &$c; // syntax error

$a = &($b = &$c); // $b = &$c is okay. 
// but $a = &(...) is error because you can not pass by reference on value (you need variable)

// You will have to do manually
$b = &$c;
$a = &$b;
etc.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.