首页 > 解决方案 > 检查一个给定的字符串是否对应一个内置的 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 关键字。

但是,我还希望能够检查一个字符串是否对应于:

  1. 一个内置的(不仅仅是“任何现有的”)PHP函数,包括“mb_strpos”和“dl”。
  2. 一个“特殊的全局变量”,例如“$argc”、“$argv”、“$_GET”、“$_POST”、“$php_errormsg”等。

我想避免在我的代码中创建这些硬编码列表,因为这需要我永久地手动保持与所有未来的 PHP 版本保持同步,即使我设法找出所有当前存在的版本。

我在手册和网上都在寻找这样的东西,但没有任何运气。也许有人知道类似于上述 is_reserved_php_keyword() 函数的“技巧”?

遗憾的是,类似的早期问题没有可接受的答案。

标签: php

解决方案


我奇迹般地,出乎意料地自己解决了一半的问题:

function is_built_in_php_function($function_name)
{
    if (in_array($function_name, get_defined_functions()['internal']))
        return true;

    return false;
}

推荐阅读