On 1 Sep 2015, at 19:17, Rowan Collins <rowan.coll...@gmail.com> wrote:
> I'm still not sure how exists() would be anything other than an alias for > array_key_exists(). I think that is the case as well (ish). But considering that isset() seems to be the function that is used most of the time, I want to consider why that is the case. Before last week, if someone asked me to write some code to see if a variable (or key) exists, I would have simply used isset() without thinking (this being a problem if the variable was set to NULL). Whereas, if I was told to check if the variable was NULL, I would do an "$a === NULL" or is_null(). It might just be due to the functions name length or usage, while wanting to avoid undefined variable notices: <?php $search = (isset($_GET['q']) ? $_GET['q'] : ''); $search = (array_key_exists('q', $_GET) ? $_GET['q'] : ''); ?> The second one does also represent the variable in a different way (grep for "$_GET['q']", where it only appears 3 times in that code). And the second one does not really check for the existence of $_GET, which in this case is probably ok. Craig On 1 Sep 2015, at 19:17, Rowan Collins <rowan.coll...@gmail.com> wrote: > On 01/09/2015 10:29, Craig Francis wrote: >> Personally I still like the idea of an exists(), because I feel that is how >> many programmers treat and use the isset() function - simply because they do >> use NULL as a valid value, and either haven't read the manual, or forget the >> exception that is mentioned on line 1 (something I've done a couple of >> times). > > I'm still not sure how exists() would be anything other than an alias for > array_key_exists(). > > Once again, this is NOT about "using NULL as a valid value"; it's about > "using a variable's NON-EXISTENCE as a valid state". I think that is the > fundamental mistake people make - they think the "quirk" is that isset() > returns false for a null value, when that is the most rational part of it. > The "quirk" is that you don't get a warning when passing a completely > undefined variable to isset(). > > Obviously, that's not something that's likely to change, but as you say, what > we are really testing is "the value pointed at by some identifier". In an > array, that identifier can be dynamic, but in plain variable scope, that > identifier is something you the programmer have defined long before the > program executed, so its existence is never in question. > > Looked at that way, the handling of unitialised variables is just a > side-effect of the handling of NULLs, since all unitialised variables have a > default/implicit value of NULL. > > Regards, > > -- > Rowan Collins > [IMSoP] > > > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: http://www.php.net/unsub.php > -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php