php – 如何检查SPL堆栈中是否已存在某个函数?
发布时间:2020-12-13 16:43:40 所属栏目:PHP教程 来源:网络整理
导读:我正在尝试使用spl_autoload_register,我想创建一个if()语句,它将检查类方法是否已经注册. 例如: if (spl_autoload_function(array($this,'_loadClass')) // Then do nothingelse // Then run spl_autoload_register(array($this,'_loadClass)); 是否可能像
我正在尝试使用spl_autoload_register,我想创建一个if()语句,它将检查类方法是否已经注册.
例如: if (spl_autoload_function(array($this,'_loadClass')) // Then do nothing else // Then run spl_autoload_register(array($this,'_loadClass)); 是否可能像上面的代码/方法? 解决方法
你不应该.没有必要做if语句; spl_autoload_register将忽略具有相同参数的第二个调用: <?php $foo = function( $class ) { return false; }; spl_autoload_register( $foo ); var_dump( spl_autoload_functions( ) ); spl_autoload_register( $foo ); var_dump( spl_autoload_functions( ) ); 输出显示虽然我们两次调用spl_autoload_register,但仍然只有一个自动加载器; array(1) { [0]=> object(Closure)#1 (1) { ["parameter"]=> array(1) { ["$class"]=> string(10) "<required>" } } } array(1) { [0]=> object(Closure)#1 (1) { ["parameter"]=> array(1) { ["$class"]=> string(10) "<required>" } } } 如果你想确保一个类没有自己注册两次,你当然可以在某种静态成员中设置它; <?php class Foo { protected static $registered = false; public function register( ) { if( self::$registered !== false ) { return; } echo "spl_autoload_register( $this,'_loadClass' );n"; self::$registered = true; } } $foo = new Foo( ); $foo->register( ); $bar = new Foo( ); $bar->register( ); 输出显然是一行: spl_autoload_register( $this,'_loadClass' ); 那就是说,你为什么要编写自己的自动加载器?已经有很多,很难相信它们都不符合你的要求. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |