Re: [VOTE] Property Accessors for 5.5
| From: | Clint Priest | Date: | Wed, 23 Jan 2013 21:07:59 +0000 |
| Subject: | Re: [VOTE] Property Accessors for 5.5 | ||
| References: | 1 2 3 4 5 6 7 8 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-65124@lists.php.net to get a copy of this message | ||
On 1/23/2013 1:00 PM, Marco Pivetta wrote:
Actually, having the properties shown even if virtual allows us to access them in a reflection-ish manner without doing dangerous assumptions like "does the setter/getter exist"? The fact that the property is virtual is very useful, even though in dumping it doesn't show any value. I don't see any radical difference in debugging or ease of use in general. Actually, doing the same things with magic getters/setters would probably imply having to think more about the trace we want to follow when analyzing our bugs. It is just a matter of being aware of new setter/getters (that are anyway in our trace).If you stop and think about it, the current accessors are identical in functionality to defining a private variable for every __get(). So these two sets of code work and act identically: class Foo { private $bar; public __get($name) {
if($name == 'bar')
return $this->bar;
}
public __set($name, $value) {
if($name == 'bar')
$this->bar = $value;
}
public __isset($name) {
if($name == 'bar')
return isset($this->bar);
}
public __unset($name) {
if($name == 'bar')
unset($this->bar);
}
}
-- OR --
class Foo {
public $bar { get; set; }
}
Except in the first case, you have to look at four sections of code to find "everything that applies to bar" and if you add 5 or 6 more dynamic properties, you have 4 huge switch statements, again with all the code split up everywhere.
With Property Accessors, it's all right there. This of course is a very simple case, if you actually USE the dynamic nature of __get(), etc then you've got a ton more code.
--
-Clint