Возможный дубликат:
Производный класс, определенный позже в том же файле, «не существует»?
У кого-нибудь есть идеи о том, почему я получаю 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, не имеет к этому никакого отношения, но тот факт, что вызывающий код выше объявления класса.
Перемените код или, что еще лучше, переместите его в отдельный файл.