2011-09-04 15 views

答えて

3

いいえ(明らかに私はが質問にではありませんでした)。 this snippetに示すように

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

静的プロパティとメソッドがvisibilityinheritance規則に従う:あなたは彼らがあることを期待するようpublicprotected静的なメソッドとプロパティが継承されています。

17

いいえ、それは当てはまりません。 Static Methods and propertiesは、非静的なメソッドとプロパティと同じinheritedを取得し、同じ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 

これらの最後の二つの顕著な違いです従います。基本クラスの継承された静的プロパティをインクリメントすると、すべての子クラスでインクリメントされます(逆も同様です)。

関連する問題