Можно ли сказать, что статические свойства и методы не могут быть унаследованы в PHP? несколько примеров будут полезны.
Нет, это не так. Статические методы и свойства будут наследоваться так же, как и нестатические методы и свойства, и подчиняться тем же правилам видимости:
class A { static private $a = 1; static protected $b = 2; static public $c = 3; public static function getA() { return self::$a; } } class B extends A { public static function getB() { return self::$b; } } echo B::getA(); // 1 - called inherited method getA from class A echo B::getB(); // 2 - accessed inherited property $b from class A echo A::$c++; // 3 - incremented public property C in class A echo B::$c++; // 4 - because it was incremented previously in A echo A::$c; // 5 - because it was incremented previously in B
Эти последние два являются заметной разницей. Приращение унаследованного статического свойства в базовом классе также увеличит его во всех дочерних классах и наоборот.
Нет (видимо, я не мог видеть, что не в вопросе). public
и protected
статические методы и свойства наследуются так, как вы ожидали бы:
<?php class StackExchange { public static $URL; protected static $code; private static $revenue; public static function exchange() {} protected static function stack() {} private static function overflow() {} } class StackOverflow extends StackExchange { public static function debug() { //Inherited static methods... self::exchange(); //Also works self::stack(); //Works self::overflow(); //But this won't //Inherited static properties echo self::$URL; //Works echo self::$code; //Works echo self::$revenue; //Fails } } StackOverflow::debug(); ?>
Статические свойства и методы подчиняются правилам видимости и наследования, как показано в этом фрагменте .