self :: vs className :: dentro de los métodos static className en PHP

Supongo que puede que no haya ninguna diferencia, sino preferencia personal, pero cuando leo varios códigos PHP, encuentro las dos formas de acceder a la clase de métodos.

¿Cuál es la diferencia?

class Myclass { public static $foo; public static function myMethod () { // between: self::$foo; // and MyClass::$foo; } } 

Solutions Collecting From Web of "self :: vs className :: dentro de los métodos static className en PHP"

(Nota: la versión inicial decía que no había diferencia. En realidad la hay)

De hecho, hay una pequeña diferencia. self:: reenvía las llamadas estáticas, mientras que className:: no lo hace. Esto solo es importante para los enlaces estáticos finales en PHP 5.3+.

En llamadas estáticas, PHP 5.3+ recuerda la clase llamada inicialmente. El uso de className:: hace que PHP “olvide” este valor (es decir, lo resetea a className ), mientras que self:: conserva. Considerar:

 < ?php class A { static function foo() { echo get_called_class(); } } class B extends A { static function bar() { self::foo(); } static function baz() { B::foo(); } } class C extends B {} C::bar(); //C C::baz(); //B 

Con usted puede usarlo dentro de la clase y con el “MyClass”, como lo hizo, puede hacer referencia externamente:

 $instance = new Myclass(); $variable = $instance::$foo