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
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php