phptypescastingternary-operatorshorthand-if

Ternary operator when casting a variable


While writing is_numeric($var) ? (Int)$var : (String)$var;, I was wondering if it could be possible to move the ternary operator to the part where I cast the variable:

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

Not to my surprise, it didn't work:

PHP Parse error: syntax error, unexpected '$var' (T_VARIABLE)

Is this at all possible? Or maybe something close to what I'm trying to do? It's more of a curiosity thing than a need to use it.


Solution

  • No; this is not possible. The ternary operator expects an expression which the casting operator is not.

    It would however be possible to use first-class functions, which are expressions, with the ternary operator like so:

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