Re: not_null function
| From: | Tjerk Meesters | Date: | Sat, 05 Jul 2014 07:42:41 +0000 |
| Subject: | Re: not_null function | ||
| References: | 1 2 3 4 5 6 7 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-75259@lists.php.net to get a copy of this message | ||
On Sat, Jul 5, 2014 at 3:39 PM, Tjerk Meesters <tjerk.meesters@gmail.com>
wrote:
>
>
>
> On Sat, Jul 5, 2014 at 9:22 AM, Kris Craig <kris.craig@gmail.com> wrote:
>
>> On Fri, Jul 4, 2014 at 2:38 PM, Xen <xen@dds.nl> wrote:
>>
>> > On Fri, 4 Jul 2014, Levi Morrison wrote:
>> >
>> > For completeness, it is available in Perl and I believe Perl had it
>> >> first; not completely sure though.
>> >>
>> >
>> > Okay, I never used Perl.
>> >
>> >
>> > I don't think changing isset would be beneficial, sadly. I wish it
>> >> only checked that a variable exists and didn't do the not null check
>> >> but it's used very, very widely.
>> >>
>> >
>> > As long as people don't have to use isset anymore to check for a
>> not-null,
>> > perhaps over time this widespreadedness would become less.
>> >
>> > As soon as you can use "unless (is_null())" to check whether a variable
>> > exists and is not null, the need for using isset for this should greatly
>> > diminish...
>> >
>> > Just my perspective. I don't know what other people think, the boogieman
>> > of this list seems to not want to discuss anything related to this, so I
>> > don't know.
>> >
>> > I mean for me it means having to rethink my thinking, i.e. to get used
>> to
>> > this new statement. But it would probably become very natural?
>> >
>> > I would imagine a lot of people becoming enthusiastic about an "unless"
>> > statement. It is also a sexy thing to introduce and it doesn't require
>> any
>> > changes to existing code.
>> >
>> > Again, just my perspective. Curious what other people really think at
>> this
>> > point.
>> >
>> > Regards, Bart
>> >
>> >
>> > --
>> > PHP Internals - PHP Runtime Development Mailing List
>> > To unsubscribe, visit: http://www.php.net/unsub.php
>> >
>> >
>> I'm not much into Perl or Ruby, either, but I agree that an unless keyword
>> would be a very nice thing to have. However, I'm still not sure how that
>> would solve the isset problem. If the variable doesn't exist, are you
>> saying that encapsulating it within the unless arg would prevent an
>> undefined variable notice from being thrown? If so, could someone
>> elaborate on why that is? And if not, then while I do agree it's a good
>> idea on its own merits, I don't think it solves the issue we're mulling
>> over here.
>>
>> Currently, this is what's available for checking a variable's status
>> without throwing any errors:
>>
>> Variable exists and !== NULL: isset( $var )
>> Variable === NULL or doesn't exist: !isset( $var )
>> Variable == NULL or doesn't exist: empty( $var )
>> Variable exists and != NULL: !empty( $var )
>> Variable exists (including NULL): ????
>>
>
> Yep, nothing exists for that; we have a whole bunch of
>
_exists()
> functions, but not e.g. variable_exists() or even a dedicated
> exists
> opcode.
>
>
>> Variable exists and === NULL: ????
>>
>
> That's simply @$var === null or
> @is_null($var) of course ;-)
>
Obviously spoke to soon ... what I've written there is basically an ugly
!isset($var).
Sorry for the extra noise.
>
>>
>> It's those last two cases that we currently don't have any streamlined
>> approach for. If a variable is NULL and you use isset() on it, the return
>> will be FALSE. So if you were to do something like isset( $var ) && $var
>> === NULL, that statement will always return FALSE, even you set the
>> variable with $var = NULL beforehand. You'll get the same problem using
>> empty(). In other words, as far as I can tell, there's currently no way
>> to
>> tell if a variable is set and NULL (or just set with any value including
>> NULL) in PHP.
>>
>> The closest thing I could find that accomplishes this is
>> property_exists().
>> That function will return TRUE even on NULL values. But as I understand
>> it, that function only works on properties; i.e. variables that are a part
>> of a class. There doesn't seem to be any option for doing this with
>> procedural variables. We know that setting a variable to NULL in PHP is
>> not the same as unsetting it because referring to it later won't throw an
>> undefined notice, but aside from catching that notice itself, there
>> doesn't
>> seem to be any way to accomplish this. Am I missing something? I realize
>> it's an edge case, but it still needs to be covered.
>>
>> --Kris
>>
>
>
>
> --
> --
> Tjerk
>
--
--
Tjerk