PHP: функция __autoload никогда не вызывается - PullRequest
3 голосов
/ 16 октября 2011

Итак, у меня есть xampp.Я тестировал этот код на ZendServer, результат тот же.

<?php
error_reporting(E_ALL);

define ("ABS_PATH", 'C:\xampp\htdocs\oopHotLine\\');

function __autoload($class_name) {
    echo 'gg';
    require_once (ABS_PATH.'classes\\'.$class_name.'.php');
}

$process=new Main('1');
?>

после php.exe -a index.php У меня есть это:

Interactive mode enabled
Fatal error: Class 'Main' not found in C:\xampp\htdocs\oopHotLine\index.php on line 10
[Finished]

, поэтому он не показывает 'gg'выход.Если я вручную сделаю __autoload ('Main');- все ок.То же самое для руководства require_once или include.Все разрешения в папке Windows установлены на полный доступ.Версия Php - версия PHP => 5.3.8;

Пожалуйста, помогите.

Ответы [ 3 ]

2 голосов
/ 16 октября 2011

Как указал DaveRandom:

Autoloading is not available if using PHP in CLI interactive mode.

Таким образом, вместо использования php.exe -a index.php, отключите -a и попробуйте запустить скрипт с php.exe index.php.

0 голосов
/ 07 марта 2012

http://www.php.net/manual/en/function.spl-autoload-register.php

Если ваш код имеет существующую функцию __autoload, тогда эта функция должен быть явно зарегистрирован в стеке __autoload. Это потому что spl_autoload_register () эффективно заменит кеш двигателя функция __autoload с помощью spl_autoload () или spl_autoload_call ().

0 голосов
/ 16 октября 2011

Примечания из Руководства PHP на эту тему, которые могут иметь отношение:

Судя по первому зарегистрированному сообщению, это, вероятно, ответ:

Автозагрузка недоступна при использовании PHP в интерактивном режиме CLI.

... но также:

spl_autoload_register () обеспечивает более гибкую альтернативу для автозагрузки классов.По этой причине использование __autoload () не рекомендуется и может быть исключено или удалено в будущем.

Кроме этого, вот как я бы написал вашу функцию автозагрузки:

function __autoload($class_name) {
  if (file_exists(ABS_PATH."classes/$class_name.php")) { // At least check the file exists before you require it!
    // Forward slashes work on Windows too (in PHP at least)... and they make it more portable
    require_once (ABS_PATH."classes/$class_name.php");
  }
}
...