2013-05-29 86 views
2

继续教程我正在努力解决PHP函数中的问题。我对C#和Java有一些基本的背景知识,根据我的知识,这段代码不应该工作,因为我没有在add()函数中传递任何参数,但是,令人惊讶的是,它工作正常!
根据PHP Manual func_num_args()获取传递给函数的参数个数。我们如何回显add()函数的结果,而我们没有在函数中传递任何参数?另外,如果函数用于获取参数的数量,我们如何使用它来计算数字?!对PHP感到困惑func_num_args()函数

<?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

使用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; 
} 

正如我在评论中提到的 “无参数” 的情况:

func_num_args()的返回值是0for -loop在你的代码中不起作用,因为从$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()函数。

不需要特殊的语法,参数列表可能仍然是 明确提供的函数定义,并将表现为 正常。

+0

或可替代'func_num_args'和'func_get_arg' – Orangepill

+0

嗨腐败,我想你没有得到我的问题!我在问为什么第二部分代码:echo add(2,5,10,12);正在工作,而我没有通过添加()functin任何参数? –

+0

@MonaCoder''我'<$ args'在'for'循环条件部分是'false'(在“无args”的情况下)。周期被忽略。 – BlitZ

1

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

请通过此链接。它会真正帮助你摆脱困惑。

php function overloading

1

使用func_get_args()

func_num_args()的返回值为0,循环在你的代码不会作为$i < $args工作简化为0 < 0,这是假的。

为了兽医预科,你可以尝试使用:

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