Php 转换变量时的三元运算符

Php 转换变量时的三元运算符,php,types,casting,ternary-operator,shorthand-if,Php,Types,Casting,Ternary Operator,Shorthand If,写入时是否为数值($var)?(Int)$var:(字符串)$var,我想知道是否可以将移动到变量所在的部分: echo (is_numeric($var) ? Int : String)$var; 不让我惊讶的是,它不起作用: PHP分析错误:语法错误,意外的“$var”(T_变量) 这有可能吗?或者是接近我想做的事?这与其说是需要使用它,不如说是一种好奇心。是的,这是可能的。这应该适合您: var_dump((is_numeric($var)?(int)$var :(string)$var

写入
时是否为数值($var)?(Int)$var:(字符串)$var,我想知道是否可以将移动到变量所在的部分:

echo (is_numeric($var) ? Int : String)$var;
不让我惊讶的是,它不起作用:

PHP分析错误:语法错误,意外的“$var”(T_变量)


这有可能吗?或者是接近我想做的事?这与其说是需要使用它,不如说是一种好奇心。

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

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

强制转换更改表达式左侧解释值的方式。三元函数返回一个选择运行时值(而不是类型)。您需要以不同的方式强制转换相同的变量,而不是选择类型。。。我看到@Rizier123添加了一个答案:)答案不错,但我一直在寻找一种在实际演员中使用它的方法,就像我问题中的代码一样。在问题的第一部分,我试图暗示我熟悉类型杂耍和三元运算符的概念,但想知道这是否可以在cast表达式中移动。不管怎样,投票吧。@ManeatingKoala啊,现在我知道你想做什么了,但这在我看来是不可能的know@ManeatingKoala更新了我的答案,这是我能想到的,与你想要的答案非常相似,因为“三元运算符期望一个表达式,而铸造运算符不是”。