Я написал функцию PHP, которая может принимать 10 параметров, но требуются только 2. Иногда я хочу определить восьмой параметр, но не хочу вводить пустые строки для каждого из параметров, пока не дойду до восьмого.
Одна из моих идей заключалась в том, чтобы передать абстрактную функцию с массивом параметров, которая передает ее реальной функции.
Есть ли лучший способ настроить функцию, чтобы я мог передавать только те параметры, которые мне нужны?
php
function
parameter-passing
user481826
источник
источник
Ответы:
Сделайте так, чтобы функция принимала один параметр: массив. Передайте фактические параметры как значения в массиве.
Изменить: ссылка в комментарии Пекки почти подводит итог.
источник
В этом случае я передал массив, где ключ - это имя параметра, а значение - это значение.
источник
Чтобы выполнить то, что вы хотите, используйте массив, как сказал Rabbot (хотя это может стать проблемой для документирования / поддержки при чрезмерном использовании). Или просто используйте традиционные необязательные аргументы.
Однако я обычно обнаруживаю, что когда я начинаю писать функцию / метод с таким количеством аргументов - чаще всего это запах кода, и его можно преобразовать / абстрагировать во что-то более чистое.
источник
В PHP 5.6 и более поздних версиях списки аргументов могут включать токен ... для обозначения того, что функция принимает переменное количество аргументов. Аргументы будут переданы в данную переменную в виде массива; например:
Пример использования ... для доступа к переменным аргументам
Приведенный выше пример выведет:
Списки аргументов переменной длины Документация по PHP
источник
Вы можете просто установить значение по умолчанию на null.
источник
null
типа даты. например,array()
для массивовПРИМЕЧАНИЕ. Это старый ответ для PHP 5.5 и ниже. PHP 5.6+ поддерживает аргументы по умолчанию
В PHP 5.5 и ниже вы можете добиться этого, используя один из следующих двух методов:
Как пользоваться
Я предпочитаю второй метод, потому что он понятен и понятен, но иногда вам может понадобиться первый метод.
источник
$x = null; if ($x) echo "true"; else echo "false";
будет печатать «false», даже если $ x var имеет значение («null» в этом коде). Кроме того, в обоих методах мы используем тернарный оператор, поэтому правильно использовать только один знак «=». Если вы проверяете с помощьюmethod(); method(1); method(1, 2);
, то первый вызов свяжет arg1 и arg2 со значениями по умолчанию, второй вызов свяжет второй аргумент со значением по умолчанию и "1" для первого аргумента. Последний вызов не связывает значения по умолчанию.Думаю, вы тоже можете использовать объекты как params-transportes.
Конечно, вы должны установить значения по умолчанию для «optParam8» и «optParam2» в этой функции, в противном случае вы получите «Notice: Undefined property: stdClass :: $ optParam2»
Если в качестве параметров функции используются массивы, мне нравится такой способ установки значений по умолчанию:
источник
Если для создания объекта с допустимым состоянием требуются только два значения, вы можете просто удалить все другие необязательные аргументы и предоставить им сеттеры (если вы не хотите, чтобы они изменялись во время выполнения). Затем просто создайте экземпляр объекта с двумя обязательными аргументами и настройте остальные по мере необходимости с помощью установщика.
дальнейшее чтение
источник
Я знаю, что это старый пост, но у меня была проблема, такая как OP, и это то, что я придумал.
Пример массива, который вы можете передать. Вы можете повторно заказать это, если требуется конкретный заказ, но в этом вопросе это будет делать то, что вам задают.
Это управляемо, легко читается, а точки извлечения данных могут быть добавлены и удалены в любой момент в любом месте кодирования и при этом избежать масштабной перезаписи. Я использовал целочисленные ключи, чтобы соответствовать исходному вопросу OP, но строковые ключи можно было использовать так же легко. Собственно для читабельности я бы посоветовал это.
Вставьте это во внешний файл для удобства
поместите это в начало, если файл.
Просто используйте их, чтобы назначить следующий фрагмент данных, используя нумерацию / именование в соответствии с тем, откуда поступают данные.
И наконец передаем массив
источник
Вы можете создать обычную функцию, а затем добавить дополнительные переменные, присвоив им значение Null по умолчанию.
Null по-прежнему является значением, если вы не вызываете функцию со значением для этой переменной, она не будет пустой, поэтому ошибки нет.
источник
Если вы обычно просто передаете 8-е значение, вы можете изменить порядок параметров так, чтобы оно было первым. Вам нужно только указать параметры до последнего, который вы хотите установить.
Если вы используете разные значения, у вас есть 2 варианта.
Один из них - создать набор функций-оберток, которые принимают разные параметры и устанавливают значения по умолчанию для других. Это полезно, если вы используете всего несколько комбинаций, но может быстро запутаться.
Другой вариант - передать массив, в котором ключи - это имена параметров. Затем вы можете просто проверить, есть ли значение в массиве с ключом, и если нет, использовать значение по умолчанию. Но опять же, это может привести к путанице и добавить много дополнительного кода, если у вас много параметров.
источник
PHP допускает аргументы по умолчанию ( ссылка ). В вашем случае вы можете определить все параметры от 3 до 8 как NULL или как пустую строку "" в зависимости от кода вашей функции. Таким образом, вы можете вызвать функцию только с использованием первых двух параметров.
Например:
источник
echo " this is arg3: " . $arg3;
и т. Д., Вы увидите, что вызов, например,yourFunction(3, 2, $arg8=5);
будет печатать32 this is arg3: 5
. Проблема в том, что положение параметра все еще имеет значение при передаче дополнительных параметров в PHP ... имена параметров недостаточно для сопоставления значений параметров с именами параметров.Просто установите Null, чтобы игнорировать параметры, которые вы не хотите использовать, а затем установите необходимый параметр в соответствии с положением.
источник
источник
default
является ключевым словом в PHP .