Cuando usa selfpara referirse a un miembro de la clase, se está refiriendo a la clase dentro de la cual usa la palabra clave. En este caso, su Fooclase define una propiedad estática protegida llamada $bar. Cuando usa selfen la Fooclase para hacer referencia a la propiedad, hace referencia a la misma clase.
Por lo tanto, si intentó usar self::$baren otra parte de su Fooclase, pero tenía una Barclase con un valor diferente para la propiedad, usaría en Foo::$barlugar de Bar::$bar, que puede no ser lo que pretende:
class Foo
{
protected static $bar = 1234;
}
class Bar extends Foo
{
protected static $bar = 4321;
}
Cuando llamas a un método a través de static, estás invocando una función llamada enlaces estáticos tardíos (introducidos en PHP 5.3).
En el escenario anterior, el uso selfresultará en Foo::$bar(1234). Y el uso staticresultará en Bar::$bar(4321) porque con static, el intérprete tiene en cuenta la redeclaración dentro de la Barclase durante el tiempo de ejecución.
Por lo general, utiliza enlaces estáticos tardíos para métodos o incluso para la propia clase, en lugar de propiedades, ya que no suele volver a declarar propiedades en subclases; un ejemplo del uso de la staticpalabra clave para invocar un constructor de enlace tardío se puede encontrar en esta pregunta relacionada: New self vs new static
Sin embargo, eso no excluye el uso también staticcon propiedades.