У меня есть ситуация, когда у меня есть функция, которая выполняет поиск в базе данных и возвращает либо значение, либо ошибку. Я хотел бы иметь один оператор, который вызывает функцию и в зависимости от результата либо назначает возвращаемое значение, либо значение по умолчанию.
Используя оператор tenary, я мог сделать что-то вроде этого:
$val=(getVal($param)!='error' ? getVal($param) : "default");
но я не хочу дважды вызывать getVal, потому что он оправдывает запросы к базе данных и является дорогостоящим по производительности.
Я мог бы также сделать это в двух заявлениях, но если возможно, я просто хочу одно. Ценю любую помощь.
Попробуй это
$val=(($result=getVal($param))!='error' ? $result : "default");
Есть только два способа, которыми я знаю (возможно, есть и другие).
Либо вы сначала присваиваете результат функции переменной, а затем используете if:
$res = getVal($param);
$val = ($res != 'error' ? $res : "default");
Примечание. Возможно, это лучший вариант как для удобочитаемости, так и для производительности.
Или вы модифицируете функцию из этого:
function getVal($param) {
...
return $something;
}
к этому:
function getVal ($param, &$result) {
...
$result = $something;
return $something;
}
И использовать это:
$val = (getVal($param,$res) != 'error' ? $res : "default");
Но это выглядит подозрительно для меня