Clase derivada definida más adelante en el mismo archivo "no existe"?

Supongamos que tenemos dos archivos php, a.php y b.php El contenido del archivo a.php aquí:

<?php // content of a.php
class A {
}

Y aquí está el contenido del archivo b.php

<?php  // content of b.php
include dirname(__FILE__) . "/a.php";
echo "A: ", class_exists("A") ? "exists" : "doesn’t exist", "\n";
echo "B: ", class_exists("B") ? "exists" : "doesn’t exist", "\n";
echo "BA (before): ", class_exists("BA") ? "exists" : "doesn’t exist", "\n";
echo "BB: ", class_exists("BB") ? "exists" : "doesn’t exist", "\n";
class B {
}
class BA extends A {
}
class BB extends B {
}
echo "BA (after): ", class_exists("BA") ? "exists" : "doesn’t exist", "\n";

Si ejecutas el script b.php tienes esta salida:

A: exists
B: exists
BA (before): doesn’t exist
BB: exists
BA (after): exists

¿Por qué existe la clase BA solo después de la definición de la clase? ¿Y por qué existen las otras clases incluso antes de su definición? Cual es la diferencia Espero tener un comportamiento común en ambos casos ... ¿Hay alguna manera de que pueda usar la clase BA incluso antes de su definición?

Gracias

Michele

Respuestas a la pregunta(2)

Su respuesta a la pregunta