Тернарный оператор PHP (?) Использование для функций?

Я хочу сделать что-то очень простое:

if (getStatus()) {
    require_once('a.php');
} else {
    require_once('b.php');
}

function getStatus() {
    return true; //For the sake of this demo
}

Как это можно переписать с помощью троичного оператора?

Я предполагаю что-то вроде этого:

getStatus() ? require_once('a.php') : require_once('b.php');

Но я не могу понять синтаксис. Все примеры, которые я видел, используют это для чего-то. например x = y ? a : b;, но я не хочу использовать это таким образом.

Что я хочу сделать, даже возможно с этим?

Более сложный:

Можно ли это также выразить в троичной форме?

if (websiteIsLive()) {
    setcookie("token", x, 0, '/', $_SERVER['HTTP_HOST'], true);
} else {
    setcookie("token", y, 0, '/');
}

1 ответ

Решение

Аргументы троичного оператора, как и любой другой оператор, должны быть выражениями. require_once это синтаксис PHP, это не функция, поэтому его нельзя использовать в выражении. Таким образом, вы должны использовать троичный оператор в аргументе require_once, который является выражением.

require_once (getStatus() ? 'a.php' : 'b.php');

По вашему дополнительному запросу вы можете сделать это с помощью троичного оператора, но результат не изящный, и ИМХО сложнее понять, чем оригинал:

call_user_func_array('setcookie', 
    websiteIsLive() ? 
        array("token", x, 0, '/', $_SERVER['HTTP_HOST'], true) :
        array("token", y, 0, '/'));
Другие вопросы по тегам