问题
So there is a problem with this, but i'm blind to it. Even after reading the documentation twice (PHP Comparison Operators)
isset($items['blog']) ? unset($items['blog']) : NULL;
Parse error: syntax error, unexpected T_UNSET
回答1:
A @Bryan points out, no function calls to language constructs within the ternary operator. Since there's no return value involved at all here though, just do:
unset($items['blog']);
There's no need to check if the value is set or not beforehand. If it is not, unset
simply won't do anything.
回答2:
You can't use unset inside of the ternary operation because it is not an expression that can be operated on. It's a language construct (like isset
and echo
) and can't be placed there.
Just use it and you're fine, no decision is needed:
unset($items['blog']);
回答3:
The error says, that T_UNSET
(that is the tokenDocs for unset
) is unexpected at that line. That means you can not place it there. That's all. Remove it and you're fine:
unset($items['blog']);
This has not much to do with the ternary operator btw., and as the code example shows, you don't need that operator for unset
anyway.
If you love ternary operators very much, you can eval the unset:
isset($items['blog']) ? eval('unset($items[\'blog\'])') : NULL;
but that's not a serious suggestion because not very straight-forward.
回答4:
just a suggest regarding to benchmark matters : only use ternary syntax when you have to e.g in a view or if you really need one line code; therefore if else operator is much faster
来源:https://stackoverflow.com/questions/10475650/why-unset-doesnt-work-in-php-ternary-operator