2011-09-04 21 views

Respuesta

3

No (Aparentemente no pude ver el no en la pregunta). publicprotected y métodos y propiedades estáticas se heredan como era de esperar que sean:

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

propiedades y métodos estáticos obedecen a las reglas visibility y inheritance como se ilustra en this snippet.

17

No. Eso no es verdad. Static Methods and properties conseguirá inherited lo mismo que los métodos y las propiedades estáticas y no obedecer a la misma 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 

Los dos últimos son la notable diferencia. Incrementar una propiedad estática heredada en la clase base también la incrementará en todas las clases secundarias y viceversa.

Cuestiones relacionadas