On Tue, Aug 19, 2003 at 04:38:03PM -0500, Shaun Thomas wrote:
> On Tue, 19 Aug 2003, fabrice wrote:
>
> > Empty($var) ? DoSomethingIfNotSetOrNull() : DoOther();
>
> That won't work. empty() will return true if the variable is set to a
> literal zero, false, blank, or null. So for your use, it's actually
> worse than isset assuming your data can have zeros or blank values.
>
> A more proper check for a pseudo variable_exists would be something like
> this:
>
> if (isset($szSomeString) || is_null($szSomeString))
> {
> // Stuff here.
> }
Won't work.
[EMAIL PROTECTED]:~$ php -r 'var_dump(isset($var) || is_null($var));'
Notice: Undefined variable: var in Command line code on line 1
bool(true)
> Because as we all know, isset only fails if the variable doesn't exist,
> or if it's set to null. So add in a check for null, and you get the
> same thing as variable_exists. Or if you're a math person:
Too bad that when you read from an undefined var, you get null also.
> var $nCount = NULL;
That is equivalent to var $nCount; btw...
> This is programmatically equivalent to initializing a variable to an
> unknown value, since the class has not yet been instantiated. Good
> practice is good practice, regardless of what the language provides.
> Sure I don't have to do this, but it makes for more readable code.
>
> This is a moot point, of course; I initialized the variable, so calling
> isset to check for existence would be silly.
>
> Some people have suggested using array_key_exists when using arrays,
> which is fine as long as you never use the PHP StdClass object which all
> database wrappers may return. Or you can waste memory by calling
> get_object_vars to treat a StdClass object like an array for the two
> things you wanted to check out of the entire object.
Or, you simply don't use pseudo-objects as nonvalidating data containers,
because arrays do that job better.
> Actually now that I think about it, the object-level functions are
> badly crippled compared to the vastness of the array_* routines,
> foreach, and so on, but that's a different discussion.
The vast majority of array functions doesn't make sense for Objects -
yet. Wait for PHP5.
> So to summarize:
>
> 1.) variable_exists($sVar) = isset($sVar) || is_null($sVar)
Wrong. I pointed that out.
> 2.) variable_exists can not be written in PHP.
And it is not neccessary, because get_defined_vars() exists.
> 3.) Using nulls to initialize variables is not stupid.
Noone ever said said that.
Still no need to test for their existance, imo.
If you did $var = null; somewhere, you don't need to test for its
existance anymore.
And even if you did
if (condition()) {
$var = 'value';
} elseif (other_condition()) {
$var = null;
} else {
unset($var);
}
There is no need to check for existance, imo. $var = null; means it has
no value afterwards, so you can just use isset(). There's no value you
could overwrite.
> 4.) Thus, add variable_exists, or deal with annoying double-check
> on every variable you intend to use this way.
Since your presumptions are flawed, the conclusion is also.
And, given good design, where would you need it?
--
Regards,
Stefan Walk
<[EMAIL PROTECTED]>
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php