我的文件包含常量。如何获得常量名称和常量值。问题是常量值有一些时间空间。我使用file()
然后使用foreach
...
示例:
define('LNG_UTF-8', 'Universal Alphabet (UTF-8)');
define('LNG_ISO-8859-1', 'Western Alphabet (ISO-8859-1)');
define('LNG_CustomFieldsName', 'Custom Field');
define('LNG_CustomFieldsType', 'Type');
我已经尝试过:
获得常量名称:
$getConstant1 = strpos($mainFileArray[$i], '(\'');
$getConstant2 = strpos($mainFileArray[$i], '\',');
$const = substr($mainFileArray[$i], $getConstant1 + 2, $getConstant2 - $getConstant1 - 2);
获得恒定值
$position1 = strpos($file[$i], '\',');
$position2 = strpos($file[$i], '\');');
$rest = substr($file[$i], $position1 + 3, $position2 - $position1 - 2);
但是当空间或','时没有工作......
我怎样才能让它始终有效?
答案 0 :(得分:1)
与此匹配的正则表达式将是:
preg_match("/define\(\s*'([^']*)'\s*,\s*'([^']*)'\s*\)/i", $line, $match);
echo $match[1], $match[2];
请参阅http://rubular.com/r/m9plE2qQeT。
但是,只有当字符串是单引号'
,不包含转义引号,字符串不连接等时才有效。例如,这会破坏:
define('LNG_UTF-8', "Universal Alphabet (UTF-8)");
define('LNG_UTF-8', 'Universal \'Alphabet\' (UTF-8)');
define('LNG_UTF-8', 'Universal Alphabet ' . '(UTF-8)');
// and many similar
要使至少前两个工作,您应该根据PHP解析规则使用token_get_all
解析 PHP文件,然后浏览生成的标记并提取您需要的值。
要使所有案例都有效,您需要实际评估 PHP代码,即include
文件,然后只需将常量作为常量访问PHP。
答案 1 :(得分:1)
您应该使用get_defined_constants()
功能。它返回一个关联数组,其中包含所有常量及其值的名称。