J'ai fait quelques recherches sur ce problème et c'est vraiment bizarre.
Les propriétés statiques à l'intérieur des méthodes conservent leur état entre les instances de l'objet. Ce qui peut prêter à confusion. Il y a aussi deux statiques : l'une est la fonction statique et l'autre est la variable statique à l'intérieur de la méthode.
C'est peut-être lié à l'autochargeur. J'ai fait un exemple similaire au vôtre mais sans utiliser de méthodes statiques mais en utilisant une variable statique dans la méthode. Le résultat est 1:1:1 en utilisant l'autoloader et le même fichier.
<?php
class Base
{
public function t()
{
static $number = 0;
$number++;
var_dump($number);
}
public static function e()
{
static $number = 0;
$number++;
var_dump($number);
}
}
$base = new Base();
$base->t();
$a = new A();
$a->t();
$b = new B();
$b->t();
Aussi, si vous n'exécutez pas Base::e()
le résultat est correct.
J'ai fait require_once sans autoloading et ça marche toujours. C'est donc bien à cause de l'autoloader.
Si vous mettez
require_once "Base.php";
require_once "A.php";
require_once "B.php";
au lieu de la fonction autoloader, cela fonctionne. Je n'en ai aucune idée. J'ai essayé de trouver quelque chose en considérant les variables statiques avec l'autoloader mais sans succès. Cependant, cette réponse peut vous donner un indice.