php - 检查一个给定的字符串是否对应一个内置的 PHP 函数或预定义的特殊变量?
问题描述
我可以使用以下代码检查字符串是否对应于“保留关键字”,例如“if”、“for”和“else”(由 Stack Exchange 用户在上一个问题中给出):
function is_reserved_php_keyword($string)
{
$tokens = token_get_all('<?php ' . $string . '; ?>');
return reset($tokens[1]) !== T_STRING;
}
虽然有点“hacky”,但它似乎完美地适用于 PHP 关键字。
但是,我还希望能够检查一个字符串是否对应于:
- 一个内置的(不仅仅是“任何现有的”)PHP函数,包括“mb_strpos”和“dl”。
- 一个“特殊的全局变量”,例如“$argc”、“$argv”、“$_GET”、“$_POST”、“$php_errormsg”等。
我想避免在我的代码中创建这些硬编码列表,因为这需要我永久地手动保持与所有未来的 PHP 版本保持同步,即使我设法找出所有当前存在的版本。
我在手册和网上都在寻找这样的东西,但没有任何运气。也许有人知道类似于上述 is_reserved_php_keyword() 函数的“技巧”?
遗憾的是,类似的早期问题没有可接受的答案。
解决方案
我奇迹般地,出乎意料地自己解决了一半的问题:
function is_built_in_php_function($function_name)
{
if (in_array($function_name, get_defined_functions()['internal']))
return true;
return false;
}
推荐阅读
- github - 带有 Jekyll 的 Github 页面:使用最小值订购导航栏和标题?
- excel - 在 Excel 工作表和其中包含公式的访问查询之间链接
- javascript - 如何在 Next.js 中实现 React hook Socketio
- java - Android EditText:向上展开
- java - 使用 Spring 的上下文初始化失败
- c++ - 同一指令的输出不同 - 移动和复制ctor
- jmeter - jmeter中什么是线程转储和堆转储以及我们如何生成和分析线程转储
- reactjs - 如何描述 this.props 和 this.store?
- java - 为什么在使用我的应用程序反序列化此 Avro 架构时出现“未知魔术字节”错误,但使用 kafka-avro-console-consumer 时却没有?
- asp.net-core - 如何在 IdentityServer4 中配置多个 Oidc 提供程序