È sicuro dire che proprietà e metodi statici non possono essere ereditati in PHP? alcuni esempi saranno utili.Proprietà e metodi di ereditarietà e metodi statici
13
A
risposta
3
No (A quanto pare non ho potuto vedere il non nella domanda). public
e protected
metodi e proprietà statiche vengono ereditate come ci si aspetta che siano:
<?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();
?>
proprietà e metodi statici obbedire alle regole visibility e inheritance come illustrato nella this snippet.
17
No. Non è vero. Static Methods and properties otterrà inherited uguale a metodi e proprietà non statici e obbedire stesso 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
Questi ultimi due sono la notevole differenza. L'incremento di una proprietà statica ereditata nella classe base verrà incrementato anche in tutte le classi figlie e viceversa.
Problemi correlati
- 1. Ereditarietà e sovraccarico di metodi
- 2. Accedere alla proprietà statica tramite metodi statici e non statici?
- 3. Inizializzatori statici e metodi statici in Java
- 4. Metodi statici e di istanza in Python
- 5. metodi statici e test di unità
- 6. Metodi statici: quando e quando no
- 7. Quando utilizzare classi e metodi statici?
- 8. Generici Java, singleton e metodi statici
- 9. filettatura e statici metodi in C#
- 10. PHPUnit Mock oggetti e metodi statici
- 11. Quando utilizzare Proprietà e metodi?
- 12. metodi di estensione statici
- 13. Manomanti metodi 'statici' rispetto ai metodi 'istanza'
- 14. Metodi pubblici statici vs metodi pubblici
- 15. Metodi statici in PHP
- 16. Java - Metodi statici generici
- 17. Metodi statici Python, perché?
- 18. Metodi statici nell'interfaccia java
- 19. Metodi in linea statici?
- 20. PHP ottenere metodi statici
- 21. F # Metodi statici privati
- 22. Metodi statici di classe Python
- 23. metodi statici di refactoring in metodi di istanza in Eclipse
- 24. Uso corretto di "getInstance" e metodi statici in PHP?
- 25. Motivo dell'aggiunta di metodi predefiniti e statici nelle interfacce
- 26. Completamento automatico di Eclipse con classi generiche e metodi statici
- 27. È possibile simulare proprietà e metodi protetti
- 28. DOM4: proprietà e metodi deprecati, cosa significa?
- 29. due classi con metodi e proprietà comuni
- 30. Come prendere in giro metodi statici e metodi di classe Python