#php #function #random #parameters
#php #функция #Случайный #параметры
Вопрос:
У меня есть функция, которая загружает изображение бабочки.
Возможны 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>';
}
Теперь проблема, с которой я сталкиваюсь, заключается в том, что я хотел бы, чтобы значение random было установлено только в том случае, если параметры не переданы.
Что-то вроде:
if(!$randbf) {
$randbf = rand(1,4);
}
Но это не сработает, если я передам
randombf('1','2','whatever')
Он выполняет случайное независимо.
Что я делаю не так?
Комментарии:
Ответ №1:
Вам следует изменить порядок ваших параметров. Поставьте позицию первой, потому что она всегда будет указана. Если вы сделаете это таким образом, вы сможете написать randombf(12)
or randombf(12, 1, 2)
или даже randombf(12, 1)
.
Для пропущенных параметров будет установлено значение null
(вы можете указать что угодно еще, если хотите, но только скалярные значения), поэтому вам нужно только проверить, соответствует ли var 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>';
}
Позвольте мне включить ссылку, которую @Matt Ball опубликовал в моем ответе:
Ответ №2:
То, что @bazmegakapa говорит о порядке ваших входных параметров и о том, что второй и третий параметры являются необязательными, правильно. Но он не указывает на несколько других важных моментов в вашем коде.
- не передавайте эхо из функций, возвращайте результат и передавайте его эхом из вашего представления или связанных с ним частей кода
- напишите читаемые имена переменных и функций
- не перезаписывайте входные переменные, создавайте новые
Ваша функция могла бы выглядеть примерно так:
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;
Комментарии:
1. 1 положительный момент. Обычно я не так строго отношусь к перезаписи входных переменных для такой маленькой функции, но это только у меня.
2. да … это можно обсудить. Функция готова стать более сложной подобным образом.
3. вам не хватает закрывающих скобок в каждом if