กำหนดค่าเดียวกันให้กับตัวแปรหลายตัวพร้อมกัน?


116

ฉันจะกำหนดค่าเดียวกันสำหรับตัวแปรหลายตัวใน PHP พร้อมกันได้อย่างไร

ฉันมีสิ่งที่ชอบ:

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

ในกรณีของฉันฉันไม่สามารถเปลี่ยนชื่อตัวแปรทั้งหมดให้มีชื่อเดียวกันได้ (ซึ่งจะทำให้ง่ายขึ้น) มีวิธีใดบ้างที่จะกำหนดค่าเดียวกันให้กับตัวแปรทั้งหมดด้วยวิธีที่กะทัดรัดกว่านี้

คำตอบ:


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

ยอดเยี่ยมทำงานได้สมบูรณ์แบบสำหรับฉัน $ level1 = $ level2 = $ level3 = $ level4 = false;
geilt

1
มีข้อ จำกัด หรือไม่?
dipi evil

9
ไม่สามารถใช้ในคลาส Php และเป็นประเภทดิบ
บัญดารา

@ChamindaBandara หมายความว่ายังไงไม่สามารถใช้ในคลาส PHP ได้?
Eoin

4
@Eoin: ในการทำ$var_a = $var_b = ... = new Class();ตัวแปรทั้งหมดจะอ้างอิงอินสแตนซ์เดียวกันของClass.
Tim Cooper

1

เพื่อเพิ่มคำตอบอื่น ๆ

$a = $b = $c = $d หมายความว่าจริง $a = ( $b = ( $c = $d ) )

PHP ส่งผ่านประเภทดั้งเดิมint, string, etc.ตามค่าและวัตถุโดยอ้างอิงตามค่าเริ่มต้น

นั่นหมายความว่า

$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

อย่างไรก็ตามคุณสามารถส่งผ่านวัตถุด้วยค่าได้เช่นกันโดยใช้คำสำคัญcloneแต่คุณจะต้องใช้วงเล็บ

$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

แต่คุณไม่สามารถส่งผ่านประเภทดั้งเดิมโดยการอ้างอิงด้วยคำหลัก& โดยใช้วิธีนี้

$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.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.