可以肯定地说静态属性和方法不能在PHP中继承吗?一些例子会有帮助。PHP继承和静态方法和属性
13
A
回答
3
否(显然我在问题中看不到而不是)。 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();
?>
静态属性和方法服从visibility和inheritance规则为this snippet所示。
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
这些最后两个是显着的差异。增加基类中的继承静态属性也会在所有子类中增加它,反之亦然。
相关问题
- 1. 继承和静态属性
- 2. 基类和继承的静态属性
- 3. Php继承,动态属性和新的静态()构造函数
- 4. 继承静态方法和字段
- 5. 继承和静态工厂方法
- 6. 原型继承和静态方法
- 7. Coffeescript中的静态方法和继承
- 8. PHP的静态属性和方法
- 9. 如何在Javascript中继承静态和非静态属性?
- 10. 静态方法的继承和多态性
- 11. 静态方法的继承和静态变量继承有何不同?
- 12. 静态方法的继承
- 13. 继承静态方法
- 14. Typescript静态方法继承
- 15. 继承静态方法
- 16. PHP重载的静态属性和静态方法
- 17. 有没有办法让PHP的子类继承属性(静态和实例)?
- 18. 静态类和继承
- 19. C#继承和静态类
- 20. 静态新建和继承
- 21. 继承和静态变量
- 22. 初始化继承的静态属性
- 23. 通过静态和非静态方法访问静态属性?
- 24. Python的属性和继承
- 25. PHP静态成员继承
- 26. php静态函数继承
- 27. 继承和方法
- 28. 多态性和继承
- 29. 多态性和继承
- 30. java继承和多态性