#40775 [Asn->Csd]: __autoload not invoked in cli interactive mode?

From: Date: Mon, 14 May 2007 10:02:34 +0000
Subject: #40775 [Asn->Csd]: __autoload not invoked in cli interactive mode?
References: 1  Groups: php.doc 
Request: Send a blank email to phpdoc+get-969376316@lists.php.net to get a copy of this message
ID: 40775 Updated by: rquadling@php.net Reported By: seanius at debian dot org -Status: Assigned +Status: Closed Bug Type: Documentation problem Operating System: Debian GNU/Linux PHP Version: 5.2.1 Assigned To: rquadling New Comment: 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. Previous Comments: ------------------------------------------------------------------------ [2007-05-14 09:54:33] rquadling@php.net 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 <?php 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 <?php echo ini_get('auto_prepend_file'), PHP_EOL, function_exists('__autoload') ? 'Found loader' : 'No loader', PHP_EOL; auto_loader.php 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:\> So. I'll document this in the "Autoloading objects" page and in "-a"/interactive shell page. ------------------------------------------------------------------------ [2007-04-26 09:16:37] tony2001@php.net 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-03-11 12:20:45] seanius at debian dot org Description: ------------ 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 http://bugs.debian.org/406264 Reproduce code: --------------- <?php 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 Barlol 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 ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=40775&edit=1

« previous php.doc (#969376316) next »