转换变量时的三元运算符


Ternary operator when casting a variable

在编写is_numeric($var) ? (Int)$var : (String)$var;时,我想知道是否可以将三元运算符移动到我转换变量的部分:

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

不出所料,它没有奏效:

PHP 解析错误:语法错误、意外的"$var"(T_VARIABLE)

这可能吗?或者也许与我想要做的事情很接近?这更像是一种好奇心,而不是使用它的需要。

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

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

不,这是不可能的。三元运算符需要一个表达式,而转换运算符不需要。

但是,可以使用一等函数,即表达式,三元运算符如下所示:

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