Проверьте, установлен ли параметр функции - PullRequest
5 голосов
/ 22 апреля 2011

У меня есть функция, которая загружает изображение бабочки.

Существует 3 возможных параметра: цвет , угол и положение

Последний всегда установлен явно, но первые 2, если не установлены, определяется случайным числом. Это означает, что функция всегда будет загружать красивую бабочку со случайным цветом и под углом, если не указано иное.

У меня есть это

function randombf ($randbf,$randangle,$position) {
    $randbf = rand(1,4);
    $randangle = rand(1,4);
    echo '<div class="bf '.$position.'" style="background:url(\'images/bf_'.$randangle.'_'.$randbf.'.png\');"></div>';
}

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

Что-то вроде:

if(!$randbf) {
    $randbf = rand(1,4);
}

Но это не сработает, если я пройду

randombf('1','2','whatever')

Выполняет случайную выборку независимо.

Что я делаю не так?

Ответы [ 2 ]

11 голосов
/ 22 апреля 2011

Вам следует изменить порядок ваших параметров. Сначала укажите позицию, потому что она будет указана всегда. Если вы сделаете это таким образом, вы сможете написать randombf(12) или randombf(12, 1, 2) или даже randombf(12, 1).

Пропущенные параметры будут установлены на null (вы можете указать что-нибудь еще, если хотите, но только скалярные значения), поэтому вам нужно только проверить, является ли переменная is_null().

function randombf ($position, $randbf = null, $randangle = null) {
    if (is_null($randbf)) $randbf = rand(1,4);
    if (is_null($randangle)) $randangle = rand(1,4);
    echo '<div class="bf '.$position.'" style="background:url(\'images/bf_'.$randangle.'_'.$randbf.'.png\');"></div>';
}

Позвольте мне включить ссылку @ Мэтт Болл опубликовал в моем ответе:

Аргументы функции по умолчанию

2 голосов
/ 22 апреля 2011

То, что @bazmegakapa говорит о порядке ваших входных параметров и делает необязательным второй и третий параметры, является правильным.Но он не указывает на некоторые другие важные вещи, касающиеся вашего кода.

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

Ваша функция может выглядеть примерно так:

function getRandomButterfly ($position, $butterfly = null, $angle = null) 
{
    if (is_null($butterfly)
    {
        $randomButterfly = rand(1, 4);
    }
    else
    {
        $randomButterfly = $butterfly;
    }

    if (is_null($angle)
    {
        $randomAngle = rand(1, 4);
    }
    else
    {
        $randomAngle = $angle;
    }

    $markup =
    '<div class="bf '.$position.'" style="background:url(\'images/bf_'.$randomAngle.'_'.$randomButterfly.'.png\');"></div>';

    return $markup;
}

$markup = getRandomButterfly(3);
echo $markup;
...