PHP: __autoload function doesn't ever called

左心房为你撑大大i 提交于 2019-12-13 14:50:46

问题


So, I have xampp. I tested this code on ZendServer, result the same.

<?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');
?>

after php.exe -a index.php i have this:

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

so, it doesn shows 'gg' output. If i manually do __autoload('Main'); - all OK. The same for the manual require_once or include. All permissions in windows folder set to full access. Php version - PHP Version => 5.3.8;

Please, help.


回答1:


As DaveRandom pointed:

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

So, instead of using php.exe -a index.php, cut the -a off and try running the script with php.exe index.php instead.




回答2:


Notes from the PHP Manual on this subject, that may be relevant:

Judging by the first message logged, this is probably the answer:

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

...but also:

spl_autoload_register() provides a more flexible alternative for autoloading classes. For this reason, using __autoload() is discouraged and may be deprecated or removed in the future.

Aside from this, here is how I would write your autoload function:

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");
  }
}



回答3:


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

If your code has an existing __autoload function then this function must be explicitly registered on the __autoload stack. This is because spl_autoload_register() will effectively replace the engine cache for the __autoload function by either spl_autoload() or spl_autoload_call().



来源:https://stackoverflow.com/questions/7781024/php-autoload-function-doesnt-ever-called

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!