ดังที่ได้กล่าวไว้แล้วใน PHP 5.6+ คุณสามารถ (ควร!) ใช้...
โทเค็น (หรือที่รู้จักกันในชื่อ "เครื่องหมายตัวดำเนินการ splat" ซึ่งเป็นส่วนหนึ่งของฟังก์ชันฟังก์ชัน Variadic ) เพื่อเรียกฟังก์ชันที่มีอาร์กิวเมนต์มากมาย
<?php
function variadic($arg1, $arg2)
{
// Do stuff
echo $arg1.' '.$arg2;
}
$array = ['Hello', 'World'];
// 'Splat' the $array in the function call
variadic(...$array);
// 'Hello World'
หมายเหตุ: รายการอาเรย์จะถูกแมปกับอาร์กิวเมนต์ตาม ตำแหน่ง ในอาเรย์ไม่ใช่คีย์
ตามความเห็นของ CarlosCarucceรูปแบบของการโต้แย้งการเปิดออกเป็นวิธีที่เร็วที่สุดในทุกกรณี ในการเปรียบเทียบบางมันมากกว่า 5 call_user_func_array
เท่าเร็วกว่า
นอกเหนือ
เพราะฉันคิดว่ามันมีประโยชน์จริง ๆ (แม้ว่าจะไม่เกี่ยวข้องโดยตรงกับคำถาม): คุณสามารถพิมพ์คำใบ้พารามิเตอร์ตัวดำเนินการสีแดงในนิยามฟังก์ชันของคุณเพื่อให้แน่ใจว่าค่าที่ส่งผ่านทั้งหมดนั้นตรงกับประเภทเฉพาะ
(โปรดจำไว้ว่าการทำเช่นนี้จะต้องเป็นพารามิเตอร์สุดท้ายที่คุณกำหนดและรวมพารามิเตอร์ทั้งหมดที่ส่งผ่านไปยังฟังก์ชันลงในอาร์เรย์)
นี่เป็นวิธีที่ดีในการตรวจสอบให้แน่ใจว่าอาร์เรย์มีรายการที่มีประเภทเฉพาะ:
<?php
// Define the function...
function variadic($var, SomeClass ...$items)
{
// $items will be an array of objects of type `SomeClass`
}
// Then you can call...
variadic('Hello', new SomeClass, new SomeClass);
// or even splat both ways
$items = [
new SomeClass,
new SomeClass,
];
variadic('Hello', ...$items);