Object properties (or members, classic ->var, not this proposed syntax) CURRENTLY, work this way:
php -r 'class foo { public $bar; } $foo = new foo(); var_dump(isset($foo->bar));' bool(false) This is because you are confusing PHP's isset() with a property_exists(). Is set. Is the variable (or member/property) set to a value? In this case, both isset() and unset() work with the property get/set you are proposing. Imagine: $results = $db->query('SELECT SQL_CALC_FOUND_ROWS * FROM some_table WHERE foo = 'bar'); if (isset($results->count)) { foreach ($results->getResult() as $result) { // Do something } } where isset() would hit: protected property count { isset { $result = $this->execute('SELECT FOUND_ROWS()'); $this->count = $result->getColumn(); if ($this->count == 0) { return false; } return false; } } Not an ideal example, but it gives you an IDEA off the top of my head of a way to take advantage of it - Davey On Nov 30, 2010, at 7:31 PM, 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)? > > As I replied elsewhere: > > Its not a matter of consistency - Properties, as a cross-language concept > are not meant to work that way. 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. > > 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. > > __isset is a whole different matter, without it we would have to assume > that every possible member name in a class either exists or does not > exist. This is because __isset, __get, __set and __unset can handle ANY > member name. > > Properties are bound to a single member name, therefore, they always > exist, unless you were to physically remove that property from the class, > which, like methods, that is not possible. > > - Dennis > > > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: http://www.php.net/unsub.php > -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php