The compiler treats class declaration as postponed even if it could be declared immediately upon script include. This results in classes not being declared as expected.
Sample:
<?php
include_once "x.php";
<?php // x.php
include_once "y.php";
assert(class_exists(X::class));
class X { } // X is declared immediately
<?php // y.php
assert(class_exists(Y::class)); // X was defined, so Y should be declared when entering this file already
class Y extends X { }
The compiler treats class declaration as postponed even if it could be declared immediately upon script include. This results in classes not being declared as expected.
Sample: