คุณจะสร้างอาร์กิวเมนต์ตัวเลือกใน php ได้อย่างไร


190

ในคู่มือ PHP เพื่อแสดงไวยากรณ์สำหรับฟังก์ชั่นที่มีพารามิเตอร์ทางเลือกพวกเขาใช้วงเล็บรอบพารามิเตอร์แต่ละตัวเลือกขึ้นอยู่กับ ตัวอย่างเช่นสำหรับdate()ฟังก์ชั่นคู่มือการอ่าน:

string date ( string $format [, int $timestamp = time() ] )

ในกรณีที่$timestampเป็นพารามิเตอร์ตัวและเมื่อปล่อยให้ว่างไว้เป็นค่าเริ่มต้นให้กับtime()ค่าตอบแทนของฟังก์ชั่น

คุณจะสร้างพารามิเตอร์ทางเลือกเช่นนี้เมื่อกำหนดฟังก์ชันที่กำหนดเองใน PHP ได้อย่างไร

คำตอบ:


253

เหมือนกับคู่มือให้ใช้เครื่องหมายเท่ากับ ( =) ในการกำหนดพารามิเตอร์ของคุณ:

function dosomething($var1, $var2, $var3 = 'somevalue'){
    // Rest of function here...
}

function dosomething($var1, $var2, $optionalValue = null)ฉันพบตัวเลือกที่ดีกว่านี้
Mohammad Zaid Pathan

52

ค่าเริ่มต้นของการโต้แย้งจะต้องมีการแสดงออกอย่างต่อเนื่อง มันไม่สามารถเป็นตัวแปรหรือการเรียกใช้ฟังก์ชัน

หากคุณต้องการฟังก์ชั่นนี้:

function foo($foo, $bar = false)
{
    if(!$bar)
    {
        $bar = $foo;
    }
}

สมมติว่า$barไม่คาดว่าจะเป็นบูลีนแน่นอน


1
อย่างไรก็ตามสิ่งนี้จะประเมินว่า 0 หรือ "false" ถูกส่งไปที่ $ bar หรือไม่
Tyzoid

33
Null เป็นค่าเริ่มต้นที่ดีกว่ามาก
Kzqai

3
@DooMMasteR นี่คุณหมายความว่า$bar === false- นี่คือการกระทำที่ควรจะทำเมื่อมีการผิดนัดไป$bar falseสิ่งนี้จะหลีกเลี่ยงการกระทำที่ไม่ถูกต้องหาก0ผ่านเข้ามาดังนั้นจึงใช้ได้ - ไม่จำเป็นต้องใช้บูลีน ดังที่ Kzqai กล่าวว่าวิธีการแก้ปัญหาทั่วไปคือการใช้$bar = nullเพราะมันสามารถใช้เมื่อค่าของ $ bar เป็นบูลีน การทดสอบแล้วจะกลายเป็น หรือif (is_null($bar)) if ($bar === null)
ToolmakerSteve

22

หมายเหตุบางประการที่ฉันพบว่ามีประโยชน์เช่นกัน:

  • เก็บค่าเริ่มต้นของคุณทางด้านขวา

    function whatever($var1, $var2, $var3="constant", $var4="another")
  • ค่าเริ่มต้นของการโต้แย้งจะต้องมีการแสดงออกอย่างต่อเนื่อง มันไม่สามารถเป็นตัวแปรหรือการเรียกใช้ฟังก์ชัน


14

ตั้งค่าเริ่มต้นให้อาร์กิวเมนต์ที่เป็นตัวเลือก

function date ($format, $timestamp='') {
}

10

ฟังก์ชั่นวันที่จะถูกกำหนดบางอย่างเช่นนี้:

function date($format, $timestamp = null)
{
    if ($timestamp === null) {
        $timestamp = time();
    }

    // Format the timestamp according to $format
}

โดยปกติแล้วคุณจะใส่ค่าเริ่มต้นเช่นนี้:

function foo($required, $optional = 42)
{
    // This function can be passed one or more arguments
}

อย่างไรก็ตามเฉพาะตัวอักษรเป็นอาร์กิวเมนต์เริ่มต้นที่ถูกต้องซึ่งเป็นเหตุผลที่ฉันใช้nullเป็นอาร์กิวเมนต์เริ่มต้นในตัวอย่างแรกไม่ใช่ $timestamp = time()และรวมเข้ากับการตรวจสอบโมฆะ ตัวอักษรรวมถึงอาร์เรย์ ( array()หรือ[]), บูลี, ตัวเลข, nullสตริงและ


8

หากคุณไม่ทราบจำนวนคุณลักษณะที่ต้องดำเนินการคุณสามารถใช้โทเค็นรายการอาร์กิวเมนต์ variadic ( ...) ที่แนะนำใน PHP 5.6 ( ดูเอกสารฉบับเต็มได้ที่นี่ )

ไวยากรณ์:

function <functionName> ([<type> ]...<$paramName>) {}

ตัวอย่างเช่น:

function someVariadricFunc(...$arguments) {
  foreach ($arguments as $arg) {
    // do some stuff with $arg...
  }
}

someVariadricFunc();           // an empty array going to be passed
someVariadricFunc('apple');    // provides a one-element array
someVariadricFunc('apple', 'pear', 'orange', 'banana');

ดังที่คุณเห็นโทเค็นนี้จะเปลี่ยนพารามิเตอร์ทั้งหมดเป็นอาร์เรย์ซึ่งคุณสามารถประมวลผลได้ตามที่คุณต้องการ

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