PHP &$string - นี่หมายความว่าอะไร? [ทำซ้ำ]

ฉัน googling แต่ไม่พบอะไรเลย

$x->func(&$string, $str1=false, $str2=false);

นั่น & ก่อน $string &$string ทำอะไร?


person Mickey    schedule 06.12.2013    source แหล่งที่มา
comment
ใครก็ตามที่ทำเครื่องหมายว่าซ้ำกัน: ปัจจุบันนี้ไม่ถูกต้อง ... คำถามนี้ไม่ซ้ำกัน เนื่องจากการรวมกันของสัญลักษณ์ &$ จะไม่แสดงในคำถามที่เรียกว่าคำถามอ้างอิง โปรดแสดงความเอาใจใส่และพิจารณาให้มากขึ้นในการทำเครื่องหมายคำถามว่าซ้ำกัน   -  person mike rodent    schedule 28.03.2015
comment
ไมค์พูดถูก ยังไม่ได้รับคำตอบ อย่างน้อยก็ไม่ได้อยู่ในหน้าที่ระบุ การตอบกลับประเภทนี้ไม่มีความรับผิดชอบ ควรถูกแบนและบุคคลที่สร้างมันควรถูกลดระดับลง   -  person Apostolos    schedule 09.04.2017


คำตอบ (5)


คุณกำลังกำหนดค่าอาร์เรย์นั้นโดยการอ้างอิง

การส่งผ่านอาร์กิวเมนต์ผ่านการอ้างอิง (&$) และโดย $ คือเมื่อคุณส่งผ่านอาร์กิวเมนต์ผ่านการอ้างอิง คุณจะทำงานกับตัวแปรดั้งเดิม หมายความว่าหากคุณเปลี่ยนมันภายในฟังก์ชันของคุณ มันก็จะถูกเปลี่ยนภายนอกเช่นกัน หากคุณส่งผ่านอาร์กิวเมนต์เป็น คัดลอก ฟังก์ชันสร้างอินสแตนซ์การคัดลอกของตัวแปรนี้ และทำงานกับสำเนานี้ ดังนั้นหากคุณเปลี่ยนในฟังก์ชัน จะไม่มีการเปลี่ยนแปลงภายนอก

อ้างอิง: http://www.php.net/manual/en/language.references.pass.php

person Krish R    schedule 06.12.2013
comment
คำอธิบายง่ายๆ ขอบคุณ - person Mickey; 06.12.2013
comment
ลิงก์เอกสารของคุณเป็นหัวข้อที่เกี่ยวข้องแต่ต่างกัน - person Rob Baillie; 06.12.2013
comment
@Rob Baillie ขอบคุณ ฉันได้อัปเดตลิงก์แล้ว - person Krish R; 06.12.2013

& ระบุว่าการอ้างอิงถึงตัวแปรควรถูกส่งผ่านไปยังฟังก์ชัน แทนที่จะเป็นการลอกแบบของมัน

ในสถานการณ์นี้ หากฟังก์ชันเปลี่ยนค่าของพารามิเตอร์ ค่าของตัวแปรที่ส่งผ่านก็จะเปลี่ยนไปเช่นกัน

อย่างไรก็ตาม คุณควรคำนึงถึงสิ่งต่อไปนี้สำหรับ PHP 5:

  • การอ้างอิงเวลาโทร (ตามที่คุณแสดงในตัวอย่างของคุณ) เลิกใช้แล้วในเวอร์ชัน 5.3
  • การส่งผ่านโดยการอ้างอิงเมื่อระบุไว้ในลายเซ็นของฟังก์ชันไม่ได้เลิกใช้แล้ว แต่ไม่จำเป็นสำหรับออบเจ็กต์อีกต่อไป เนื่องจากขณะนี้ออบเจ็กต์ทั้งหมดถูกส่งผ่านโดยการอ้างอิง

คุณสามารถค้นหาข้อมูลเพิ่มเติมได้ที่นี่: http://www.php.net/manual/en/language.references.pass.php

และมีข้อมูลมากมายที่นี่: ข้อมูลอ้างอิง — ทำอะไร สัญลักษณ์นี้หมายถึงใน PHP?

ตัวอย่างพฤติกรรมของสตริง:

function changeString( &$sTest1, $sTest2, $sTest3 ) {
    $sTest1 = 'changed';
    $sTest2 = 'changed';
    $sTest3 = 'changed';
}

$sOuterTest1 = 'original';
$sOuterTest2 = 'original';
$sOuterTest3 = 'original';

changeString( $sOuterTest1, $sOuterTest2, &$sOuterTest3 );

echo( "sOuterTest1 is $sOuterTest1\r\n" );
echo( "sOuterTest2 is $sOuterTest2\r\n" );
echo( "sOuterTest3 is $sOuterTest3\r\n" );

เอาท์พุต:

C:\test>php test.php

sOuterTest1 is changed
sOuterTest2 is original
sOuterTest3 is changed
person Rob Baillie    schedule 06.12.2013

& หมายถึงการส่งผ่านโดยการอ้างอิง:

การอ้างอิงอนุญาตให้ตัวแปรสองตัวอ้างอิงถึงเนื้อหาเดียวกัน กล่าวอีกนัยหนึ่ง ตัวแปรชี้ไปที่เนื้อหา (แทนที่จะกลายเป็นเนื้อหานั้น) การส่งผ่านโดยการอ้างอิงทำให้ตัวแปรสองตัวชี้ไปยังเนื้อหาเดียวกันภายใต้ชื่อที่ต่างกัน เครื่องหมายและ (&) จะถูกวางไว้หน้าตัวแปรที่จะอ้างอิง

person LightningBoltϟ    schedule 06.12.2013

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

ดูเพิ่มเติม: ตัวดำเนินการ =& ของ PHP

ตัวอย่าง:

$string = "test";
$x->func(&$string); // inside: $string = "test2";
echo $string; // test2

หากไม่มีตัวดำเนินการ & คุณจะยังคงเห็น "ทดสอบ" ในตัวแปรของคุณ

person eX0du5    schedule 06.12.2013
comment
ตลกดีที่คุณพูดถึง =& ฉันเพิ่งเห็นและเรียนรู้ว่ามันคืออะไรคืนนี้ ฉันเขียนโค้ดมาหลายปีแล้วและไม่เคยใช้มันมาก่อน - person Mickey; 06.12.2013
comment
ฉันเขียนโค้ด php มาหลายปีแล้ว แต่ก็ไม่ค่อยได้ใช้ โดยส่วนใหญ่คุณจะผ่านวัตถุและไม่ต้องการสิ่งนี้ - person eX0du5; 06.12.2013

& – ผ่านโดยการอ้างอิง มันถูกส่งผ่านโดยการอ้างอิงแทนค่าสตริง

person user3069029    schedule 06.12.2013