Classe derivada definida posteriormente no mesmo arquivo “não existe”?

Vamos supor que temos dois arquivos php, a.php e b.php Aqui está o conteúdo do arquivo a.php:

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

E aqui está o conteúdo do arquivo 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";

Se você iniciar o script b.php, você tem esta saída:

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

Por que a classe BA existe somente depois da definição de classe? E por que as outras classes existem mesmo antes de sua definição? Qual é a diferença? Eu esperaria ter um comportamento comum em ambos os casos ... Existe uma maneira que eu poderia usar a classe BA antes mesmo de sua definição?

Obrigado

Michele

questionAnswers(2)

yourAnswerToTheQuestion