困惑于PHP func_num_args()函数

时间:2013-05-29 04:51:40

标签: php

遵循教程我正在努力解决PHP函数中的问题。我有一些关于C#和Java的基本背景知识,根据我的知识,这段代码不应该工作,因为我没有在add()函数中传递任何参数,但是,令人惊讶的是!它的工作原理!
根据{{​​3}},func_num_args()获取传递给函数的参数个数。当我们没有在函数中传递任何参数时,我们如何回显add()函数的结果?!另外,如果函数是用于获取参数的数量,我们如何使用它来计算数字?!

<?php
 function add(){
  $args  = func_num_args();
  $sum  = 0; 
  $i    = 0;
  for($i; $i< $args; $i++ ){
   is_int(func_num_args($i)) ? $sum+= func_num_args($i) : die('Use Only Numbers');
 }
}

echo add(2,5,10,12);
?>

感谢您的评论

3 个答案:

答案 0 :(得分:3)

使用func_get_args()

function add(){
    if(!func_num_args())return 0;

    $args = func_get_args();
    $sum  = 0;

    foreach($args as $arg){
        if(is_int($arg)){
            $sum += $arg;
        } else {
            die('Use Only Numbers');
        }
    }

    return $sum;
}

正如我在“no args”案例的评论中提到的那样:

func_num_args()的返回值为0for - 代码中的循环在$i < $args之后无效,简化为0 < 0,即false

要想要这样做,你可以尝试使用:

if(!func_num_args()){
    die('There are no args!');
}

您的专线echo add();无论如何都会有效,because

  

PHP支持用户定义的可变长度参数列表   功能。这非常简单,使用func_num_args(),   func_get_arg()和func_get_args()函数。

     

不需要特殊语法,参数列表可能仍然存在   显式提供函数定义,并将表现为   正常。

答案 1 :(得分:1)

我觉得你很困惑,因为你知道重载函数是什么,但php不支持这种方式的函数重载。

请浏览此链接。它真的可以帮助你摆脱困惑。

php function overloading

答案 2 :(得分:1)

使用func_get_args()

func_num_args()的返回值为0.代码中的for循环将不起作用$i < $args简化为0&lt; 0,这是假的。

要想要这样做,你可以尝试使用:

if(!func_num_args()){
    die('There are no args!');
}