Quando você usa selfpara se referir a um membro da classe, está se referindo à classe na qual usa a palavra-chave. Nesse caso, sua Fooclasse define uma propriedade estática protegida chamada $bar. Quando você usa selfna Fooclasse para se referir à propriedade, está fazendo referência à mesma classe.
Portanto, se você tentou usar self::$barem outro lugar em sua Fooclasse, mas tinha uma Barclasse com um valor diferente para a propriedade, ela usaria em Foo::$barvez de Bar::$bar, o que pode não ser o que você pretende:
class Foo
{
protected static $bar = 1234;
}
class Bar extends Foo
{
protected static $bar = 4321;
}
Quando você chama um método via static, está invocando um recurso chamado late bindings estáticos (introduzido no PHP 5.3).
No cenário acima, usar selfresultará em Foo::$bar(1234). E usar staticresultará em Bar::$bar(4321) porque com static, o interpretador leva em consideração a redeclaração dentro da Barclasse durante o tempo de execução.
Normalmente, você usa vinculações estáticas tardias para métodos ou até mesmo para a própria classe, em vez de propriedades, visto que não costuma redeclarar propriedades em subclasses; um exemplo de uso da staticpalavra - chave para invocar um construtor de ligação tardia pode ser encontrado nesta questão relacionada: Novo self vs. novo estático
No entanto, isso não impede o uso staticcom propriedades também.