>>>> That is true for PHP variables.  isset is basically saying "does this
>>>> variable exist", and unset is saying to get rid of it.
>>>
>>> This is also true for object properties - see magic methods. I don't
>>> see
>>> why you shouldn't be able to unset them - you can do that with regular
>>> properties... So what you imagine would happen if you call
>>> unset($foo->property) or isset($foo->property)?
>>
>> Its not a matter of consistency - Properties, as a cross-language
>> concept
>> are not meant to work that way.
> I tend to disagree.
> The need to be consistent inside of PHP has precedence over being
> consistent with other languages.

Unfortunately I find that to be one of the major downfalls of PHP.  It
sometimes disregards defacto standards that are set across the entire
industry, which causes a lot of frustration for new programmers. 
Sometimes the functionality PHP adds by going its own way is worth it, but
often it is just a confusing mess.  Thats just my opinion though, YMMV.


>> You need to think of a property as a set
>> of two methods that just have a pretty syntax.  Methods cannot be unset,
>> and nor should properties be allowed to.  isset() should simply tell us
>> whether a property with the specified name is part of the class or not.
> I think, it really is the other way around.
> Properties are meant to give the programmer the illusion that she is just
> having a field.
> That is abstraction. She does not care about implementation details.
> And that is the power of properties.
>
> isset() and unset() are perfectly fine in that context.
> And I do not see a problem to provide the standard semantics for them
> automatically, and let the programmer add isset/unset methods to the
> property as needed in exactly the same style as get/set.
>
> There is a good usecase for asking whether a property has been set, for
> instance to verify initialization.
> And, of course unset has also a useful meaning. It is about the value, and
> even so there are methods around a value, properties are meant to be
> values.
> There are definitely use-cases where that does not hold, but that is
> application specific.
>
>
>> isset() in the way you suggest would just be confusing.  It would allow
>> is
>> to say that a property does not exist, when in fact it does exist.  This
>> is not logical.
> From the docu: isset — Determine if a variable is set and is not NULL
> There is nothing confusing about isset($this->Hours) == FALSE in your
> example if isset($this->seconds) == FALSE.

Right, I understand how it would work, and the reasons why it would "make
sense", but it just feels wrong to me.  When you unset() a variable in a
class, that whole variable is gone.  Its not just hiding somewhere, its
completely gone.  If a property were to "pretend" it is not set, with an
isset method, it would still be there - just hiding.  That is why it does
not make sense to me.

- Dennis


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

Reply via email to