Как создать необязательные аргументы в php?

В руководстве по PHP, чтобы показать синтаксис для функций с необязательными параметрами, они используют скобки вокруг каждого набора зависимых необязательных параметров. Например, для функции date() руководство гласит:

string date ( string $format [, int $timestamp = time() ] )

Где $timestamp - необязательный параметр, а если он оставлен пустым, по умолчанию используется значение, возвращаемое функцией time().

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
194
0
143 181
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий

Как и в руководстве, используйте знак равенства (=) в определении параметров:

function dosomething($var1, $var2, $var3 = 'somevalue'){
    // Rest of function here...
}

function dosomething($var1, $var2, $optionalValue = null) Я нашел этот вариант получше.

Mohammad Zaid Pathan 19.08.2019 17:31

Задайте необязательному аргументу значение по умолчанию.

function date ($format, $timestamp='') {
}

Некоторые заметки, которые я также нашел полезными:

  • Сохраните значения по умолчанию с правой стороны.

    function whatever($var1, $var2, $var3 = "constant", $var4 = "another")
    
  • Значение аргумента по умолчанию должно быть постоянным выражением. Это не может быть переменная или вызов функции.

The default value of the argument must be a constant expression. It can't be a variable or a function call.

Однако, если вам нужна эта функция:

function foo($foo, $bar = false)
{
    if (!$bar)
    {
        $bar = $foo;
    }
}

Предполагая, что $bar, конечно, не будет логическим.

однако это будет оценивать, было ли передано 0 или «ложь» $ bar.

Tyzoid 04.01.2013 06:02

Null - гораздо лучший вариант по умолчанию.

Kzqai 07.04.2013 20:23

@DooMMasteR, здесь вы имеете в виду $bar === false - это действие, которое должно быть выполнено, когда $bar по умолчанию установлен на false. Это позволит избежать неправильных действий, если будет передан 0, поэтому он действительно работает - ЕСЛИ не требуется логическое значение. Как сказал Кзкаи, более общим решением является использование $bar = null, потому что его также можно использовать, когда значения $ bar являются логическими. Затем тест становится if (is_null($bar)) или if ($bar === null).

ToolmakerSteve 17.08.2016 16:48

Функция даты может быть определена примерно так:

function date($format, $timestamp = null)
{
    if ($timestamp === null) {
        $timestamp = time();
    }

    // Format the timestamp according to $format
}

Обычно вы устанавливаете значение по умолчанию следующим образом:

function foo($required, $optional = 42)
{
    // This function can be passed one or more arguments
}

Однако только литералы являются допустимыми аргументами по умолчанию, поэтому я использовал null в качестве аргумента по умолчанию в первом примере, нет$timestamp = time(), и объединил его с нулевой проверкой. Литералы включают массивы (array() или []), логические значения, числа, строки и null.

Если вы не знаете, сколько атрибутов необходимо обработать, вы можете использовать токен списка аргументов с переменным числом аргументов (...), представленный в PHP 5.6 (см. полную документацию здесь).

Синтаксис:

function <functionName> ([<type> ]...<$paramName>) {}

Например:

function someVariadricFunc(...$arguments) {
  foreach ($arguments as $arg) {
    // do some stuff with $arg...
  }
}

someVariadricFunc();           // an empty array going to be passed
someVariadricFunc('apple');    // provides a one-element array
someVariadricFunc('apple', 'pear', 'orange', 'banana');

Как видите, этот токен в основном превращает все параметры в массив, который вы можете обрабатывать любым удобным для вас способом.

Другие вопросы по теме