Как вы передаете свои (необязательные) аргументы определяемой пользователем функции?

#php #function #coding-style

#php #функция #стиль кодирования

Вопрос:

Я имею в виду, как вы передаете свои аргументы функции?

Ваш вызов пользовательской функции выглядит следующим образом:

 $this->getSomeNumber($firstArg, $secondArg, null);
  

или вы определяете, сколько аргументов было передано функции, а затем выполняете задание?

Интересно, существует ли какой-либо стиль кодирования, охватывающий это. И как с этим справляются другие языки программирования?

Обновить

Пример для тех, кто не понимает:

 function doSmth($firstArgument) {
    if(func_num_args() > 1) {
        //do job if second argument was passed
    }
}
  

Второй пример:

 function doSmthElse($firstArgument, $secondArgument) {
    if($secondArgument) {
        //do job if second argument was passed
    }
}
  

И затем вы вызываете это как:

 doSmth($var, $secondvar) or doSmth($var)

//**OR**

doSmthElse($var, $secondvar) or doSmthElse($var, null)
  

Что лучше использовать? Я имею в виду, чего ожидают от вас другие программисты?

Комментарии:

1. Ваш вопрос не ясен. Вы вызываете функцию с таким количеством аргументов, сколько она ожидает…

2. Я думаю, что вы хотите перегрузить

3. @Oli, я спрашиваю о том, как написать вашу функцию, как ожидать, что аргументы будут переданы вашим функциям. Следует ли устанавливать необязательные аргументы равными null, если вам не нужно передавать этот аргумент. Все дело в стиле кодирования.

4. @Buddy: Да, ваш вопрос приобретает больше смысла теперь, когда вы сказали «необязательные аргументы».

Ответ №1:

Если аргумент является необязательным, укажите его обычно со значением по умолчанию:

 function foo($requiredArg, $optionalArg = null)
  

Если функция принимает несколько необязательных аргументов, укажите их явно, как в приведенном выше примере.

Если функция принимает переменное количество аргументов (например, таких, как sprintf), то используйте func_get_args amp; co.

 /**
 * Specify here as a comment that this function takes a variable amount of args
 */
function doSomethingWithParameters() {
    ...
}
  

Если функция принимает требуемые параметры и переменное количество параметров, применяется тот же подход: всегда указывайте требуемые параметры явно, как в первом примере.

Использование комментариев для уточнения аргументов переменных и т.д. Всегда хорошая идея. Возможно, было бы еще лучшей идеей использовать вместо этого массив, но это, вероятно, будет зависеть от того, что вы делаете.

Комментарии:

1. Спасибо, что прояснили это. Это из руководства по php или из вашего опыта?

2. Опыт, понятия не имею, действительно ли в руководстве упоминается что-то вроде «наилучшей практики»

Ответ №2:

Вы хотите, чтобы перед этими аргументами стояли знаки доллара:

 $this->getSomeNumber($firstArg, $secondArg, null);
  

Но если вы действительно спрашиваете о том, как использовать переменные числа аргументов в php, смотрите func_num_args и func_get_args в справке.

Комментарии:

1. О, хорошо, теперь, когда вы разъяснили, я бы предпочел, чтобы вы вызывали func_num_args и использовали if для вызова разных функций в зависимости от того, есть ли у вас один или два аргумента.