2

按照教程,我正在努力解决 PHP 函数中的问题。我有一些 C# 和 Java 的基本背景,据我所知,这段代码不应该工作,因为我没有在 add() 函数中传递任何参数,但是,令人惊讶的是!它可以工作!
根据PHP 手册, 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);
?>

感谢您的意见

4

3 回答 3

3

Use 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;
}

As I mentioned in comments for "no args" case:

func_num_args()s return value is 0. for-loop in your code will not work as of $i < $args simplifies to 0 < 0, which is false.

To prevet that, you may try to use:

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

Your line echo add(); will work anyway, because:

PHP has support for variable-length argument lists in user-defined functions. This is really quite easy, using the func_num_args(), func_get_arg(), and func_get_args() functions.

No special syntax is required, and argument lists may still be explicitly provided with function definitions and will behave as normal.

于 2013-05-29T04:54:02.923 回答
1

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

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

php函数重载

于 2013-05-29T05:19:19.740 回答
1

利用func_get_args()

func_num_args()s 返回值为 0。代码中的 for-loop 将不起作用,因为$i < $args简化为 0 < 0,这是错误的。

为了防止这种情况,您可以尝试使用:

if(!func_num_args()){
    die('There are no args!');
}
于 2013-05-29T06:46:30.813 回答