On Thu, 2003-08-14 at 08:42, Andi Gutmans wrote:
> I am not really convinced either that variable_exists() is 
> function_exists() parallel.
> Under what circumstances is this needed?
> 
> Andi

The followup I sent to Ilia gives examples of how this patch can be
used to determine whether, for instance, array keys exist, without
having to use the array_key_exists() workaround; also, you can check
whether an object has defined an attribute, even if it hasn't yet
assigned it a value:

<?php
class foo {
    var $bar;
    var $baz = null;
    var $quux = 'quux';
}
$foo = new foo;

echo "variable_exists(\$foo-&gt;bar): " . (variable_exists($foo->bar) ?
'yes' : 'no') . " (should be yes)\n";
echo "variable_exists(\$foo-&gt;baz): " . (variable_exists($foo->baz) ?
'yes' : 'no') . " (should be yes)\n";
echo "variable_exists(\$foo-&gt;quux): " . (variable_exists($foo->quux)
? 'yes' : 'no') . " (should be yes)\n";
echo "variable_exists(\$foo-&gt;quuux): " .
(variable_exists($foo->quuux) ? 'yes' : 'no') . " (should be no)\n";

echo "isset(\$foo-&gt;bar): " . (isset($foo->bar) ? 'yes' : 'no') . "
(should be yes)\n";
echo "isset(\$foo-&gt;baz): " . (isset($foo->baz) ? 'yes' : 'no') . "
(should be yes)\n";
echo "isset(\$foo-&gt;quux): " . (isset($foo->quux) ? 'yes' : 'no') . "
(should be yes)\n";
echo "isset(\$foo-&gt;quuux): " . (isset($foo->quuux) ? 'yes' : 'no') .
" (should be no)\n";
?>

...the output from the above is:

-----------------------------------------------------------------------
variable_exists($foo->bar): yes (should be yes)
variable_exists($foo->baz): yes (should be yes)
variable_exists($foo->quux): yes (should be yes)
variable_exists($foo->quuux): no (should be no)
isset($foo->bar): no (should be yes)
isset($foo->baz): no (should be yes)
isset($foo->quux): yes (should be yes)
isset($foo->quuux): no (should be no)
-----------------------------------------------------------------------

etc. It's a little annoying at times that that isset() doesn't do what
its name suggests it should, which leads people to try to use it
for things which is seems that it should be able to do, but can't. When
I've tried to explain it, the only answer I can give is "Sorry, that's
just the way it is--and no, you can't do that in PHP".

It seems basic enough functionality that is almost, but not quite,
satisfied by isset(). 


-- 
 Torben Wilson <[EMAIL PROTECTED]>                        +1.604.709.0506
 http://www.thebuttlesschaps.com          http://www.inflatableeye.com
 http://www.hybrid17.com                  http://www.themainonmain.com
 -----==== Boycott Starbucks!  http://www.haidabuckscafe.com ====-----




-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to