ตัวแปร PHP ในฟังก์ชันที่ไม่ระบุชื่อ


119

ฉันกำลังเล่นกับฟังก์ชันที่ไม่ระบุตัวตนใน PHP และตระหนักว่าพวกเขาดูเหมือนจะไม่เข้าถึงตัวแปรนอกตัวพวกเขา มีวิธีใดในการแก้ไขปัญหานี้หรือไม่?

ตัวอย่าง:

$variable = "nothing";

functionName($someArgument, function() {
  $variable = "something";
});

echo $variable;  //output: "nothing"

สิ่งนี้จะแสดงผล "ไม่มีอะไร" มีวิธีใดบ้างที่ฟังก์ชันนิรนามสามารถเข้าถึงได้$variable?

คำตอบ:


277

ใช่ใช้การปิด :

functionName($someArgument, function() use(&$variable) {
  $variable = "something";
});

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


มันใหม่! เป็นไวยากรณ์ที่ใหม่ใน PHP 5.3
Rocket Hazmat

1
@Rocket ดังนั้นเพื่อความเป็นธรรมคือไวยากรณ์ของฟังก์ชันที่ไม่ระบุตัวตนที่แท้จริง (ซึ่งตรงข้ามกับcreate_function()) และuseคำหลักนั้นได้รับการจัดทำเป็นเอกสาร (ไม่ดี) ในหน้าเอกสารเดียวกันกับที่อธิบายถึง
DaveRandom

4
บันทึกย่อสำหรับผู้ที่อาจไม่ทราบ: คุณสามารถวาง&เมื่อส่งผ่านวัตถุได้เนื่องจากวัตถุเหล่านั้นจะถูกส่งผ่านโดยการอ้างอิงเสมอ ... และอย่าลืมคำใบ้ประเภทของคุณ :) เช่น:function() use (PDO $pdo) {
keyboardSmasher

@ Alliswell ไม่ใช่สำหรับอ็อบเจ็กต์เท่านั้นมิฉะนั้นคุณจะต้องผ่านการอ้างอิงเพื่อแก้ไขตัวแปร ดูตัวอย่างนี้
nickb
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.