Re: bug 48541 - critical for PHP 5.3

From: Date: Sat, 13 Jun 2009 17:54:27 +0000
Subject: Re: bug 48541 - critical for PHP 5.3
References: 1 2 3 4 5  Groups: php.internals 
Request: Send a blank email to internals+get-44264@lists.php.net to get a copy of this message
Hi Greg, > (I meant commit when I said patch, sorry :) > > http://news.php.net/php.cvs/58696 > and > http://news.php.net/php.cvs/58697 Thanks, looks fine to me. However, I noticed that closures don't work with spl_autoload_unregister() and spl_autoload_functions(). Also, classes that define __invoke work with spl_autoload_functions() but not with spl_autoload_unregister() - unless array ($o, '__invoke') is given to spl_autoload_register() directly, then the same will work for unregister. Or, to sum it up: i) Real Closures $c = function ($class) { var_dump ('foo'); } spl_autoload_register ($c); var_dump (spl_autoload_functions ()); // '{closure}' spl_autoload_unregister ($c); // no effect ii) Invokables WORKS: <?php class Autoloader { private $dir; public function __construct ($dir) { $this->dir = $dir; } public function __invoke ($class) { var_dump ("{$this->dir}/$class.php"); } } $al1 = new Autoloader ('d1'); $al2 = new Autoloader ('d2'); spl_autoload_register (array ($al1, '__invoke')); spl_autoload_register (array ($al2, '__invoke')); var_dump (spl_autoload_functions ()); spl_autoload_unregister (array ($al1, '__invoke')); $x = new Test; ?> SEMI-WORKS: <?php class Autoloader { private $dir; public function __construct ($dir) { $this->dir = $dir; } public function __invoke ($class) { var_dump ("{$this->dir}/$class.php"); } } $al1 = new Autoloader ('d1'); $al2 = new Autoloader ('d2'); spl_autoload_register ($al1); spl_autoload_register ($al2); var_dump (spl_autoload_functions ()); // gives array ($object, '__invoke') instead of // directly $object - but that's at least equivalent spl_autoload_unregister ($al1); // no effect spl_autoload_unregister (array ($al1, '__invoke')); // no effect $x = new Test; ?> Regards, Christian

« previous php.internals (#44264) next »