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

Reply via email to