Klasa pochodna zdefiniowana później w tym samym pliku „nie istnieje”?

Załóżmy, że mamy dwa pliki php, a.php i b.php. Oto zawartość pliku a.php:

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

A oto treść pliku 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";

Jeśli uruchomisz skrypt b.php, masz to wyjście:

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

Dlaczego klasa BA istnieje tylko po definicji klasy? I dlaczego inne klasy istnieją nawet przed ich definicją? Jaka jest różnica? Spodziewałbym się wspólnego zachowania w obu przypadkach ... Czy istnieje sposób, aby użyć klasy BA nawet przed jej definicją?

Dziękuję Ci

Michele

questionAnswers(2)

yourAnswerToTheQuestion