Re[2]: [PHP-DEV] PHP 5.1
| From: | Sven Fuchs | Date: | Mon, 13 Jun 2005 20:56:03 +0000 |
| Subject: | Re[2]: [PHP-DEV] PHP 5.1 | ||
| References: | 1 2 3 4 5 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-16661@lists.php.net to get a copy of this message | ||
Why isn't is possible in userland? Is there any problem with using
this?
function ifsetor(&$var, $default = null) {
return isset($var) ? $var : $default;
}
echo ifsetor($a, 'foo');
echo $a, $b;
echo ifsetor($a, 'foo');
echo isset($a) ? 'is set' : 'not set';
expected result:
foo
Notice: Undefined variable: a in [...]
Notice: Undefined variable: b in [...]
foo
not set
actual result:
foo
Notice: Undefined variable: b in [...]
foo
not set
php does not issue a notice on using $a after having called ifsetor()
once. But further calls to isset() and ifsetor() keep returning the
expected results.
I'd assume, the missing notice is rather a bug than a feature. So
ifsetor() is possible in userland.
--
Sven
> If it were possible at all to make a function accept unset variables without
> generating a notice, I think ifsetor() shouldn't even be implemented. People
> could then have the freedom to create such functions themselves. But
> unfortunately, it doesn't seem to be possible, unless you'd suppress every
> function call with a @, which I don't think is the way to go in this case.
> So if it would be possible somehow to create your own isset()-like functions
> in PHP-code, I'd say implement something that would make that possible, and
> ingore the whole ifsetor() discussion from that moment on. People would be
> free to write whatever function they'd prefer.
> Ron
> ""Sara Golemon"" <pollita@php.net> wrote in message
> news:38.CE.21296.BFD78A24@pb1.pair.com...
>> > > What about ifsetor for 5.1 ?
>> >
>> > Would anybody be interested in a parameter for ifsetor() that would
> treat
>> > isset() as !empty() or an alternative function that achieves this? I
> know
>> > I'd love to see that. I use empty() a lot more than isset().
>> >
>> In the interrest of KISS, I'd leave the emptiness concept out of the
>> picture. Unlike isset-ness, an emptiness coalesce *can* be done in
>> userspace:
>>
>> function firstNotEmpty() {
>> $vars = func_get_args();
>> foreach($vars as $var)
>> if (!empty($var)) return $var;
>> return NULL;
>> }
>>
>> There's enough....contention over the undeniably useful and
>> not-implementable-in-userspace parts of this thread that it's not worth
>> muddling it up with things that are a simple matter to do in userspace.
> It
>> doesn't matter that notempty() and ifsetor() could easily be implemented
> by
>> the same opcode (just like isset/empty are).
>>
>> -Sara