Nobody is interested in this topic? Another confusing feature is "static function", which is allowed in interface, but not allowed in abstract class, any explanation or reason for this? Thanks :-)
2009/5/16 Jingcheng Zhang <dio...@gmail.com> > Hello all, > > Maybe I have not found its detailed description on PHP's official manual, > but PHP does allow static field inheritance. However there is a little > difference between dynamic field inheritance and static field inheritance, > as the following codes shows: > > <?php > class static_a { > public static function change($name) { > self::$name = $name; > } > public static $name = 'a'; > } > class static_c extends static_a {} > class static_d extends static_a {} > > echo static_a::$name; // a > static_c::change('c'); > echo static_a::$name; // c > static_d::change('d'); > echo static_a::$name; // d > > > class dynamic_a { > public function change($name) { > $this->name = $name; > } > public $name = 'a'; > } > class dynamic_c extends dynamic_a {} > class dynamic_d extends dynamic_a {} > > $a = new dynamic_a(); > $c = new dynamic_c(); > $d = new dynamic_d(); > echo $a->name; // a > $c->change('c'); > echo $a->name; // a > $d->change('d'); > echo $a->name; // a > ?> > > The result of static inheritance test can be meaningful on some > way(especially on class-based programming perspective), but when considering > the static class as "object" in prototype-based programming(which I doubt is > some people's favourite who comes from prototype-based OOP community), this > result can be confusing. On JavaScript, this example can be: > > <script type="text/javascript"> > function extends(parent) { > var T = function () {}; > T.prototype = parent; > return new T(); > } > var static_a = { > name: 'a', > change: function (name) { > this.name = name; > } > }; > var static_c = extends(static_a); > var static_d = extends(static_a); > > alert(static_a.name); // a > static_c.change('c'); > alert(static_a.name); // a > static_d.change('d'); > alert(static_a.name); // a > </script> > > This looks more meaningful. So my suggestion is, could PHP's static > inheritance rule follow the dynamic inheritance rule ( $this on dynamic, or > prototype delegation on JavaScript) ? > Thanks :-) > > -- > Best regards, > Jingcheng Zhang > P.R.China > -- Best regards, Jingcheng Zhang Room 304, Dormitory 26 of Yuquan Campus, Zhejiang University P.R.China