部分标准PHP扩展调用get_extension_funcs()无法获取函数列表
问题原因分析
get_extension_funcs()函数存在设计限制:该函数仅会返回扩展主动以全局函数形式导出的符号列表,如果扩展没有导出任何全局函数,就会返回false,该返回值和扩展是否正常加载没有关联。- 你提到的返回
false的扩展可分为两类:- 底层驱动类扩展:例如
mysqlnd本身是MySQL系列扩展的底层驱动,本身不会对外暴露任何全局函数,你提到的mysqli_fetch_all()属于mysqli扩展的导出函数,不属于mysqlnd。 - 面向对象接口为主的扩展:
Reflection、xmlreader、Phar、pdo_mysql、xsl这类扩展的核心能力全部以类、类方法的形式提供,没有导出全局函数,所以get_extension_funcs()无法获取到内容。
而xmlwriter扩展同时提供了面向对象接口和全局函数形式的过程化接口,导出了大量xmlwriter_开头的全局函数,所以可以正常返回数组。
- 底层驱动类扩展:例如
替代解决方案
如果你需要获取某扩展的所有导出符号(包括类、类方法、常量、全局函数),可以使用ReflectionExtension类实现,示例代码如下:
// 获取xmlreader扩展的所有导出信息 $xmlReaderExt = new ReflectionExtension('xmlreader'); // 打印扩展所有类 var_dump($xmlReaderExt->getClasses()); // 打印扩展所有全局函数(没有则返回空数组) var_dump($xmlReaderExt->getFunctions()); // 打印扩展所有常量 var_dump($xmlReaderExt->getConstants());
内容的提问来源于stack exchange,提问作者Grzegorz Adam Kowalski
相关产品推荐
相关产品推荐

