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

From: Date: Mon, 14 May 2007 09:54:34 +0000
Subject: #40775 [Opn->Asn]: __autoload not invoked in cli interactive mode?
References: 1  Groups: php.doc 
Request: Send a blank email to phpdoc+get-969376314@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: Open +Status: Assigned Bug Type: Documentation problem Operating System: Debian GNU/Linux PHP Version: 5.2.1 -Assigned To: +Assigned To: rquadling New Comment: 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. Previous Comments: ------------------------------------------------------------------------ [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 (#969376314) next »