Як уже згадувалося вище, ви не зможете пропустити параметри. Я написав цю відповідь, щоб надати якийсь додаток, який був занадто великим для розміщення в коментарі.
@Frank Nocke пропонує викликати функцію із параметрами за замовчуванням, наприклад, маючи
function a($b=0, $c=NULL, $d=''){ //...
ви повинні використовувати
$var = a(0, NULL, 'ddd');
що функціонально буде таким самим, як і опускання перших двох ( $b
і $c
) параметрів.
Незрозуміло, які з них є типовими (є 0
вводиться, щоб вказати значення за замовчуванням, чи це важливо?).
Також існує небезпека того, що проблема зі значеннями за замовчуванням підключається до зовнішньої (або вбудованої) функції, коли значення за замовчуванням можуть бути змінені автором функції (або методу). Отже, якщо ви не хочете змінити свій дзвінок у програмі, ви можете ненавмисно змінити її поведінку.
Деякі обхідні шляхи можуть полягати у визначенні деяких глобальних констант, таких як DEFAULT_A_B
"значення за промовчанням параметра B функції A" та "опущення" параметрів таким чином:
$var = a(DEFAULT_A_B, DEFAULT_A_C, 'ddd');
Для класів простіше і елегантніше, якщо ви визначите константи класів, оскільки вони є частиною глобальної сфери, наприклад.
class MyObjectClass {
const DEFAULT_A_B = 0;
function a($b = self::DEFAULT_A_B){
// method body
}
}
$obj = new MyObjectClass();
$var = $obj->a(MyObjectClass::DEFAULT_A_B); //etc.
Зверніть увагу, що ця константа за замовчуванням визначається рівно один раз у коді (значення не існує навіть у декларації методу), тому у випадку деяких несподіваних змін ви завжди будете надавати функції / методу правильне значення за замовчуванням.
Ясність цього рішення, звичайно, краща, ніж надання вихідних значень за замовчуванням (наприклад NULL
, 0
тощо), які нічого не говорять читачеві.
(Я згоден, що $var = a(,,'ddd');
найкращим варіантом буде дзвінок на подобається )