【发布时间】:2016-05-30 08:02:26
【问题描述】:
我正在编写一个 PHP 函数。我希望能够做到以下几点;
如果 splat 运算符 (...) 可用(即 PHP 版本 = 5.6+),我想使用它定义函数,否则我想使用 func_num_args() 和 func_get_args() 定义相同的函数。
这是我尝试过的:
if (!defined('PHP_VERSION_ID')) {
$version = explode('.', PHP_VERSION);
define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2]));
}
function _insert_keywords_helper($text, $keywords_array) {
$text_words_array = explode(" ", $text);
$idx = 1;
foreach ($keywords_array as $keyword) {
array_splice($text_words_array, $idx * 50, 0, $keyword);
}
return implode(" ", $text_words_array);
}
if (PHP_VERSION_ID < 56000) {
// ... splat operator is not available
function insert_keywords() {
$numargs = func_num_args();
if ($numargs < 2) {
echo "Usage: insert_keywords($text, ...keywords)";
exit();
}
$arg_list = func_get_args();
$text = $arg_list[0];
$keywords = array_slice($arg_list, 1);
return _insert_keywords_helper($text, $keywords);
}
} else {
function insert_keywords($text, ...$keywords) {
return _insert_keywords_helper($text, $keywords);
}
}
它在 PHP 版本
我想这样做的原因是为了使函数能够独立于 PHP 版本使用。我对 PHP 世界不是很熟悉。所以也许我在编写这段代码时做了一些假设。
有什么提示吗?
【问题讨论】:
-
你如何使用它来检查 splat 运算符是否存在?
-
您无法处理语法错误,因为您的代码在解析阶段失败,没有执行。如果您需要支持旧的 PHP 版本,只需使用
func_num_args()和func_get_args()。它们在较新的版本中仍然可用。 -
@dragoste:我知道它们存在于较新的版本中。我想知道这样的事情是否可行。
标签: php