Класс не найден в одном файле

Возможный дубликат:
Производный класс, определенный позже в том же файле, «не существует»?

У кого-нибудь есть идеи о том, почему я получаю Fatal Error: Class 'PublicacionController' не найден при попытке инициализировать его в инструкции if ниже?

--PublicacionController.php-- <?php /*Some random includes, those are right as far as Im concerned*/ //AJAX call if(!empty($_POST)){ if($_POST['call']=='nuevaPublicacion'){ $pc = new PublicacionController(); $pc->nuevaPublicacion($_POST); exit; } } class PublicacionController extends Controller{/* STUFF*/} ?> 

Это один файл. Я вызываю контроллер из вызова AJAX (не знаю, если это имеет какое-то отношение).

Я запускаю стандартный экземпляр Amazon Ec2 с Amazon Linux и версиями https и PHP по умолчанию из репозиториев (то же самое использует Fedora).

PHP-классы должны быть определены до создания экземпляра, см. «Новый» раздел документации PHP OO .

Легкий способ добиться этого – сначала объявить классы, а затем основной код:

 --PublicacionController.php-- <?php /*Some random includes, those are right as far as I'm concerned*/ class PublicacionController extends Controller{/* STUFF*/} //AJAX call if(!empty($_POST)){ if($_POST['call']=='nuevaPublicacion'){ $pc = new PublicacionController(); $pc->nuevaPublicacion($_POST); exit; } } ?> 

Это PHP ERROR см.: Производный класс, определенный позже в том же файле, «не существует»?

Если вы запустите

 if (! empty($_POST)) { if ($_POST['call'] == 'nuevaPublicacion') { $pc = new PublicacionController(); $pc->nuevaPublicacion($_POST); exit(); } } class Controller { function nuevaPublicacion($array) { } } class PublicacionController extends Controller {/* STUFF*/ 

Приведенный выше код будет отлично работать, если Controller будет включен через внешний файл, и он начнет генерировать ошибку.

Совет объявляет все ваши классы, прежде чем использовать их сейчас, особенно при работе с наследованием

Тот факт, что это вызов AJAX, не имеет к этому никакого отношения, но тот факт, что вызывающий код выше объявления класса.

Перемените код или, что еще лучше, переместите его в отдельный файл.