首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在PHP中使用'func_get_arg‘的好例子是什么?

在PHP中使用'func_get_arg‘的好例子是什么?
EN

Stack Overflow用户
提问于 2011-03-11 09:40:41
回答 7查看 19.5K关注 0票数 24

我刚刚发现在PHP中有一个名为func_get_arg的函数,它允许开发人员使用不同风格的获取参数。它似乎非常有用,因为参数的数量现在可以是任意的,但我想不出任何使用它的好例子。

使用这个函数来充分利用它的多态特性的一些例子是什么?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-03-11 09:44:14

我通常使用func_get_args(),如果需要多个参数,它更容易使用。

例如,重新创建PHP的max()

代码语言:javascript
复制
function max() {
   $max = -PHP_INT_MAX;
   foreach(func_get_args() as $arg) {
      if ($arg > $max) {
          $max = $arg;
      }
   }
   return $max;
}

CodePad

现在,您可以执行echo max(1,5,7,3)并获取7

票数 31
EN

Stack Overflow用户

发布于 2011-03-11 09:46:42

首先,你使用“多态性”这个术语是完全错误的。多态性是面向对象编程中的一个概念,它与函数中可变数量的参数无关。

根据我的经验,func_get_args所允许做的就是添加一些语法糖。

想一想一个函数,它可以接受任意数量的整数并返回它们的和。(我在作弊,因为这在array_sum中已经存在了。但作弊是好的,如果它保持示例简单的话)。你可以这样做:

代码语言:javascript
复制
// you can leave "array" out; I have it because we should be getting one here
function sum1(array $integers) {
    return array_sum($integers);
}

现在你可以这样称呼它:

代码语言:javascript
复制
$sum = sum1(array(1));
$sum = sum1(array(1, 2, 3, 4));

这不是很漂亮。但我们可以做得更好:

代码语言:javascript
复制
function sum2() {
    $integers = func_get_args();
    return array_sum($integers);
}

现在你可以这样叫它:

代码语言:javascript
复制
$sum = sum2(1);
$sum = sum2(1, 2, 3, 4);
票数 3
EN

Stack Overflow用户

发布于 2011-03-11 09:51:35

假设我们有多个包含数据的数组,我们需要在不合并这些数组的情况下跨键搜索它们的值。

数组如下所示:

代码语言:javascript
复制
$a = array('a' => 5, 'b' => 6);
$b = array('a' => 2, 'b' => 8);
$c = array('a' => 7, 'b' => 3);

在这种情况下,假设我们需要从所有数组中获取键a的所有值。我们可以编写一个函数,它接受任意数量的数组进行搜索。

代码语言:javascript
复制
// we need the key, and at least 1 array to search in
function simpleSearchArrays($key, $a1){
    $arrays = func_get_args();
    array_shift($arrays); // remove the first argument, which is the key
    $ret = array();
    foreach($arrays as $a){
        if(array_key_exists($key, $a)){
            $ret[] = $a[$key];
        }
    }
    return $ret;
}

所以如果我们使用函数:

代码语言:javascript
复制
 $x = simpleSearchArrays('a', $a, $b, $c);

然后,$x将包含array(5, 2, 7)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5268079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档