php – class_exists正在调用spl_autoload_register
发布时间:2020-12-13 22:11:22 所属栏目:PHP教程 来源:网络整理
导读:我为自动加载类创建了一个简单的脚本,但是当我使用class_exists执行spl_autoload_register时,例如: ?phpfunction autoLoadClass($name) { echo 'spl_autoload_register: ',$name,'br';}spl_autoload_register('autoLoadClass');class_exists('Foo');class_e
我为自动加载类创建了一个简单的脚本,但是当我使用class_exists执行spl_autoload_register时,例如:
<?php function autoLoadClass($name) { echo 'spl_autoload_register: ',$name,'<br>'; } spl_autoload_register('autoLoadClass'); class_exists('Foo'); class_exists('Bar'); class_exists('FooBar'); 输出:
是对的吗?有没有办法让“spl_autoload”忽略调用“class_exists”? 解决方法
您可以使class_exists不调用自动加载.
从 the manual开始:
所以像这样的电话: class_exists('Foo',false); 会忽略自动加载. [Demo] 也可以通过(ab)使用debug_backtrace使自动加载函数忽略来自class_exists的调用,但是该方法很丑陋并且非常慢,但为了完整起见,这里是如何做到的: function autoLoadClass($name) { foreach(debug_backtrace() as $call) { if(!array_key_exists('type',$call) && $call['function'] == 'class_exists') { return; } } echo 'spl_autoload_register: ','<br>'; } (注意:这似乎不适用于HHVM) 如果其中一个调用函数被称为class_exists,那么它基本上会中止函数,并且$call [‘type’]不能存在以确保过滤掉像SomeClass :: class_exists和$someObject-> class_exists这样的调用. [Demo] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |