Bug #69476 [Nab]: is_null() must not throw warnings

From: Date: Fri, 17 Apr 2015 17:20:51 +0000
Subject: Bug #69476 [Nab]: is_null() must not throw warnings
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-192162@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=69476&edit=1 ID: 69476 User updated by: spam2 at rhsoft dot net Reported by: spam2 at rhsoft dot net Summary: is_null() must not throw warnings Status: Not a bug Type: Bug Package: Scripting Engine problem Operating System: Linux PHP Version: Irrelevant Block user comment: N Private report: N New Comment: practically speaking the only fishy is a programming language with such illogical inconsistency not following the rule of least suprise and that *is* a bug which you can't discuss away with "i don't know why someone would write code like this" - that someone can expect a sane and logical behavior Previous Comments: ------------------------------------------------------------------------ [2015-04-17 17:13:23] nikic@php.net > well, why does isset() exists with your logic? Practically speaking, it exists so you can write isset($array['key']). This is the primary use-case for isset(). Writing isset($array), which implies that you do not know if a variable exists, sounds rather fishy to me, thus my inquiring as to your particular use-case that is supposed to require distinguishing between undefined and null for simple variables. ------------------------------------------------------------------------ [2015-04-17 17:03:14] spam2 at rhsoft dot net > Could you please describe why you consider this to be necessary? well, why does isset() exists with your logic? - it is necessary because the isset() behavior is braindead return false in case of NULL - if i want that behavior i would just use empty() the whole purpose of isset() is to check if a variable is defined the whole purpose if is_null() is to work around broken isset() behavior and no - put a @ in front is not a clean coding style ------------------------------------------------------------------------ [2015-04-17 16:57:46] spam2 at rhsoft dot net RTFM: isset($var) && !is_null($var) is nonsense because because when isset() is true it can't be NULL - just because the design mistake that isset() returns false when the value is NULL if(isset($nicht_definiert) || is_null($nicht_definiert)) is the only way to emulate a sane isset() behavior but raises a warning when the variable is undefined so you CAN NOT write code without warnings in case if you ned to know if a variable is undefined * in case of the value NULL it is not undefined * isset() has a pervert behavior returning false * if the variable is undefined is_null() raises a warning and the next time befor you close a bug or recommend something like "isset($var) && !is_null($var)" while everybody reading the docs knows that it won't work jsut read the docs ------------------------------------------------------------------------ [2015-04-17 16:52:27] nikic@php.net @cmb The question is how to detect whether a variable is defined, but null. @op You correctly surmised that there is no (obvious) way to do this. Could you please describe why you consider this to be necessary? Checking whether a *simple* variable is defined is, as far as I can tell, useless in any case. If you want to check whether an array key exists (and is null) you can use array_key_exists. Similarly for objects there is property_exists. ------------------------------------------------------------------------ [2015-04-17 16:48:53] cmb@php.net > how [...] do you test if a variable is defined with the isset() behavior > saying no if the value is NULL isset($var) && !is_null($var) ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at https://bugs.php.net/bug.php?id=69476 -- Edit this bug report at https://bugs.php.net/bug.php?id=69476&edit=1

« previous php.bugs (#192162) next »