Как уже упоминалось выше, вы не сможете пропустить параметры. Я написал этот ответ, чтобы добавить добавление, которое было слишком большим, чтобы помещать его в комментарий.
@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){
}
}
$obj = new MyObjectClass();
$var = $obj->a(MyObjectClass::DEFAULT_A_B);
Обратите внимание, что эта константа по умолчанию определяется ровно один раз во всем коде (значение отсутствует даже в объявлении метода), поэтому в случае некоторых неожиданных изменений вы всегда будете предоставлять функции / методу правильное значение по умолчанию.
Ясность этого решения, конечно, лучше, чем предоставление исходных значений по умолчанию (например NULL
, 0
и т.д.), которые ничего не говорят читателю.
(Согласен, что позвонить в лайк $var = a(,,'ddd');
будет лучшим вариантом)