【问题标题】:How to write a function that uses features from future versions of PHP in the current version?如何在当前版本中编写一个使用 PHP 未来版本的功能的函数?
【发布时间】: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


【解决方案1】:

如果你可以使用 exec 或类似的功能,试试这个:

Catching fatal error

使用 splat 运算符创建一个简单的文件,然后执行该文件并解析结果。您可能希望将结果存储在某个地方,并且只在第一次运行时检查它,或者每月检查一次。

【讨论】:

    猜你喜欢
    • 2021-11-21
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多