2009/5/16 Jingcheng Zhang <dio...@gmail.com>:
>
> 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:

Hi!

I think the current behaviour is as expected.
In that example, there is a single static field which is shared
between classes static_a, static_b and static_c. Because there is just
one value of $name, the class through which you access the value makes
no difference. On the other hand, in the case of classes dynamic_a,
dynamic_b and dynamic_c, by the nature of instance properties, each
instance has its own value of $name. So changing the value in one
instance does not affect the others. This behaviour is similar to many
other OO languages, including Java, C++ and C#.

Perhaps a closer equivalent of the Javascript code you provided is as
follows, where the static field is re-declared in subclasses, and
therefore exists as a separate entity in each class. Again, this
distinction between inherited static fields and "re-declared" static
fields also applies to other languages such as Java, C++ and C#.

<?php
class static_a {
    public static function change($name) {
        static::$name = $name;
    }
    public static $name = 'a';
}
class static_c extends static_a {
    public static $name;
}
class static_d extends static_a {
    public static $name;
}

echo static_a::$name; // a
static_c::change('c');
echo static_a::$name; // a
static_d::change('d');
echo static_a::$name; // a
?>

What do you think?

Regards,
Robin

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

Reply via email to