铸造变量时的三元运算符

时间:2015-01-27 15:40:24

标签: php types casting ternary-operator shorthand-if

在撰写is_numeric($var) ? (Int)$var : (String)$var;时,我想知道是否可以将ternary operator移动到我 cast 变量的部分:

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

不出我的意料,它不起作用:

  

PHP Parse错误:语法错误,意外'$ var'(T_VARIABLE)

这一切都可能吗?或者可能接近我正在尝试做的事情?它更像是一种好奇的东西而不是使用它的需要。

2 个答案:

答案 0 :(得分:7)

是的,这是可能的。这应该适合你:

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);

答案 1 :(得分:2)

没有;这是不可能的。三元运算符需要一个铸造运算符不是的表达式。

然而,可以使用第一类函数,它们是表达式,与三元运算符一样:

$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));