Hola, que tal. Queria hacer una pregunta sobre el metodo prueba.
 
        static $contador;
        $this->contador =& $contador;
        $this->contador++; 
Entiendo el funcionamiento o eso creo. 
supongamos:
       $contador (el atributo de la clase)
       $contador_static (atributo static del metodo) 
En un principio: 
Código:
       $contador ---------> ----------------
                          |     null       |
                           ----------------
      $contador_static  ---------> ----------------
                                  |        0        |
                                    ----------------
  entonces la sentencia: $this->contador =& $contador_static , lo que hace es cambiar la referencia (flecha) de $contador apuntado, ahora, a $contador_static 
despues $contador++, se incrementa, inicialmente a 0, pasa a 1. y como las dos variables apuntan a la misma CAJA (posicion de memoria) la variable static tambien apunta al valor incrementado. 
correcto?? 
Mi pregunta es la siguiente: ¿Por qué hacer eso? y no directamente incrementar el static? 
Saludos