Тернарный оператор при приведении переменной

Пока пишу is_numeric($var) ? (Int)$var : (String)$var;Мне было интересно, можно ли было троичный оператор к той части, где я бросать переменная:

echo (is_numeric($var) ? Int : String)$var;

Не к моему удивлению, это не сработало:

Ошибка синтаксического анализа PHP: синтаксическая ошибка, неожиданное ‘$ var’ (T_VARIABLE)

Это вообще возможно? Или, может быть, что-то близкое к тому, что я пытаюсь сделать? Это скорее любопытство, чем необходимость его использовать.

3

Решение

Нет; это невозможно. Тернарный оператор ожидает выражение, которым не является оператор приведения.

Однако было бы возможно использовать первоклассные функции, которые являются выражениями, с троичным оператором, например, так:

$toInt = function($var) {
return (int) $var;
};

$toString = function($var) {
return (string) $var;
};

$foo = "10";

var_dump(call_user_func(is_numeric($foo) ? $toInt : $toString, $foo));
2

Другие решения

Да, это возможно. Это должно работать для вас:

var_dump((is_numeric($var)?(int)$var :(string)$var));

В качестве примера для тестирования вы можете легко сделать это:

$var = 5;
var_dump((true?(int)$var :(string)$var)); //Or var_dump((false?(int)$var :(string)$var));

Выход:

int(5)  //string(1) "5"

РЕДАКТИРОВАТЬ:

Единственный способ сделать что-то похожее на то, что вы хотите — это вот что:

settype($var, (is_numeric($var)?"int":"string"));
var_dump($var);
7

По вопросам рекламы [email protected]