Hi:

On 01 Dec 2010, at 01:31, presid...@basnetworks.net wrote:

>>> 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.


> 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.

Best regards
Stefan

-- 
Stefan Marr
Software Languages Lab
Vrije Universiteit Brussel
Pleinlaan 2 / B-1050 Brussels / Belgium
http://soft.vub.ac.be/~smarr
Phone: +32 2 629 2974
Fax:   +32 2 629 3525


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

Reply via email to