2011-09-04 43 views

Trả lời

3

Không (Có vẻ như tôi không thể thấy số không phải trong câu hỏi). publicprotected phương pháp tĩnh và tài sản được thừa kế như bạn mong chờ họ là:

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

thuộc tính tĩnh và phương pháp tuân theo các quy tắc visibilityinheritance như minh họa trong this snippet.

17

No. Không đúng. Static Methods and properties sẽ nhận được inherited giống như các phương pháp và tài sản không tĩnh và tuân theo cùng 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 

Những ngoái hai là sự khác biệt đáng chú ý. Việc tăng thêm một thuộc tính tĩnh kế thừa trong lớp cơ sở cũng sẽ tăng nó trong tất cả các lớp con và ngược lại.

Các vấn đề liên quan