PHP: этот синтаксис в порядке для вызова функции с аргументами? - PullRequest
0 голосов
/ 15 сентября 2009

Мне интересно, есть ли какие-либо синтаксические проблемы, вызывающие функцию, которая имеет только один аргумент с несколькими аргументами. Например:

function foobar( $biff ) {
// do stuff...
}

... и затем вызвать функцию:

echo foobar( 'Hello', 'world', '!!!' )

Я верю, что $biff === 'Hello', верно?

А потом я буду использовать array_slice( func_get_args(), 1 ); для игры с аргументами 'world' и '!!!'.

Это правильно или не рекомендуется?

P.S. Я работаю внутри оболочки функций, который содержит множество других функций, содержащих различное количество аргументов.

Ответы [ 6 ]

1 голос
/ 15 сентября 2009

Идея должна работать, и она совершенно верна: она называется Списки аргументов переменной длины ; и это не " правильно " или " неправильно ".

Если вам это нужно, хорошо, используйте его; -)

Одна небольшая проблема, связанная с тем, как вы используете func_get_arg: вы не можете использовать его в качестве параметра функции - см. Примечание внизу страницы руководства.


Проблема, которую я вижу с такой идеей, состоит в том, что вы не получите подсказки в вашей IDE - что не очень хорошо при написании кода: - (

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


Другой вариант, если вы знаете минимальное количество возможных аргументов, будет использовать default / optionnal parameters .

0 голосов
/ 16 сентября 2009

Это будет работать, но, как говорит @Pascal Martin, назначьте аргументы, возвращенные func_get_arg, переменной, прежде чем манипулировать ею. Чтобы получить помощь по коду в вашей IDE, вы можете просто использовать нотацию PhpDoc:

/**
 * This function takes $biff and does yadayadayada. Additionally, more arguments 
 * can be passed in and will be used to ...
 * @param string $biff This argument will ...
 * @param string [$foo] Optional. Any number of arguments can be passed in and ..
 * @return string The return value of this function is $biff and any other 
 * parameters ...
 */
function foobar( $biff ) {
// do stuff...
}

Эта нотация поможет вам в работе с кодами в Eclipse PDT, Zend Studio и, возможно, еще в нескольких других.

0 голосов
/ 15 сентября 2009

Я думаю, это сработает. В PHP есть страница, которая описывает, как это работает, перечисляет все функции, связанные с переменными аргументами, и имеет несколько примеров: http://php.net/manual/en/functions.arguments.php#functions.variable-arg-list

0 голосов
/ 15 сентября 2009

PHP: func_get_args

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

0 голосов
/ 15 сентября 2009

ваш array_slice подход будет работать только в новых версиях php (начиная с 5.3)

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

0 голосов
/ 15 сентября 2009

Лучшим подходом было бы определить все ожидаемые аргументы и иметь необязательные аргументы со значением по умолчанию:

function foo($a, $b = '', $c = 1) { ... }

Таким образом, гораздо более очевидно, какие параметры могут быть переданы функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...