I did just notice one major problem with it, but it's the design of PHP (and most other languages) that causes it: the ternary operator supports lazy evaluation (only evaluates what is needed based on the condition), whereas the iif() function evaluates all of its arguments regardless of the condition's value.
An excerpt of my code that demonstrates the problem:
PHP Code:
function vbms_get_all_quota_usages($userids = false)
{
global $DB_site;
$usages = array();
$extrawhere = iif($userids !== false, "AND userid IN (" . implode(", ", $userids) . ")");
Look at that last line. If $userids strictly equals false, it will still try to implode $userids, and of course you can't implode a non-array. The ternary operator's lazy execution doesn't try to implode $userids if it is boolean false.