2011-09-04 12 views

Odpowiedz

3

Nie (Wygląda na to, że w pytaniu nie było ani). public i protected statyczne metody i właściwości są dziedziczone, jak można się spodziewać, że będzie:

<?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(); 
?> 

właściwości statyczne i metody przestrzegać zasad visibility i inheritance jak pokazano na this snippet.

17

Nie. To nieprawda. Static Methods and properties dostanie inherited tak samo jak metody i właściwości statycznych i nie słuchać samo visibility rules:

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 

Te dwie ostatnie są zauważalną różnicą. Inkrementacja odziedziczonej właściwości statycznej w klasie bazowej spowoduje również jej zwiększenie we wszystkich klasach podrzędnych i na odwrót.