|  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Doc Bug #40775 __autoload not invoked in cli interactive mode?
Submitted: 2007-03-11 12:20 UTC Modified: 2007-05-14 10:02 UTC
From: seanius at debian dot org Assigned: rquadling (profile)
Status: Closed Package: Documentation problem
PHP Version: 5.2.1 OS: Debian GNU/Linux
Private report: No CVE-ID: None
 [2007-03-11 12:20 UTC] seanius at debian dot org
the __autoload hook doesn't seem to be run for the cmdline/cgi versions  of php when invoked in "interactive" (-a) mode.

originally reported at

Reproduce code:
function __autoload($class)
echo $class;// should output class name
echo 'lol';// should at least print it if it comes into function body
require($class . '.php');// should break script because of missing file
// but it will just cause fatal error about missing class :|
$foo = new Bar(); ?>

Expected result:
client-158[~]13:14:49$ php < foo.php
Warning: require(Bar.php): failed to open stream: No such file or directory in - on line 6

Fatal error: require(): Failed opening required 'Bar.php' (include_path='.:/usr/share/php:/usr/share/pear') in - on line 6

Actual result:
client-158[~]13:14:54$ php -a < foo.php
Interactive mode enabled

Fatal error: Class 'Bar' not found in - on line 9


Add a Patch

Pull Requests

Add a Pull Request


AllCommentsChangesGit/SVN commitsRelated reports
 [2007-04-26 09:16 UTC]
Yes, __autoload() can not be invoked when compiling because compiler is not reentrant (and interactive mode means we're always compiling).
Reclassified as docu problem.
 [2007-05-14 09:54 UTC]
The manual stages that using auto_prepend_file/auto_append_file are allowed in interactive mode:

"Files included through auto_prepend_file and auto_append_file are parsed in this mode but with some restrictions - e.g. functions have to be defined before called."

So, I have an __autoload() function in a file which is included in my auto_prepend_file entry.

php -a
echo ini_get('auto_prepend_file'), PHP_EOL, function_exists('__autoload') ? 'Found loader' : 'No loader', PHP_EOL;
$obj_DB = new class_DB();

results in 

2007/05/14 10:51:34 C:\>php -a
Interactive mode enabled

echo ini_get('auto_prepend_file'), PHP_EOL, function_exists('__autoload') ? 'Found loader' : 'No loader', PHP_EOL;
Found loader
$obj_DB = new class_DB();

Fatal error: Class 'class_DB' not found in C:\- on line 3

2007/05/14 10:51:35 C:\>?>
The syntax of the command is incorrect.

2007/05/14 10:51:35 C:\>


I'll document this in the "Autoloading objects" page and in "-a"/interactive shell page.
 [2007-05-14 10:02 UTC]
This bug has been fixed in the documentation's XML sources. Since the
online and downloadable versions of the documentation need some time
to get updated, we would like to ask you to be a bit patient.

Thank you for the report, and for helping us make our documentation better.

 [2020-02-07 06:10 UTC]
Automatic comment on behalf of rquadling
Log: FIX #40775 : PHP -a and __autoload() don't mix.
PHP Copyright © 2001-2021 The PHP Group
All rights reserved.
Last updated: Sat Jul 31 01:01:23 2021 UTC