2013-05-29 3 views
2

Следуя учебному пособию, я борюсь с проблемой в функции PHP. У меня есть базовый фон на C# и Java, и, по моим сведениям, этот код не должен работать, так как я не передаю какой-либо параметр в функции add(), но, что удивительно !, он работает!
Согласно PHP Manual func_num_args() Получает количество аргументов, переданных функции.so, как мы можем эхо результата функции add(), пока мы не передаем какой-либо параметр в функции ?! Кроме того, если функция предназначена для получения количества аргументов, как мы можем использовать ее для вычисления чисел ?!Confused on 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() сек возвращаемое значение 0 , for -Класс в вашем коде не работает с $i < $args упрощает до 0 < 0, что составляет false.

Для PREVET, что вы можете попробовать использовать:

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

Ваша линия echo add(); будет работать в любом случае, because:

PHP имеет поддержку переменной длины списки аргументов пользователя -defined функции. Это очень просто, используя функции func_num_args(), func_get_arg() и func_get_args().

Необязательный синтаксис не требуется, и список аргументов может быть явно предоставлен с определениями функций и будет вести себя как нормальный.

+0

или в качестве альтернативы '' func_num_args' и func_get_arg' – Orangepill

+0

Привет Corrupt, я думаю, что вы не получите мой вопрос! Я спрашиваю, почему вторая часть кода: echo add (2,5,10,12); работает, пока я не передал никаких аргументов с помощью функции add() functin? –

+0

@MonaCoder '$ i <$ args' в разделе условия' for'-loop является 'false' (в случае« no args »). Цикл игнорируется. – BlitZ

1

Я думаю, вы сбиты с толку, потому что знаете, какая функция перегрузки, но php не поддерживает перегрузку функции таким образом.

Пожалуйста, перейдите по этой ссылке. Это действительно поможет вам в вашем замешательстве.

php function overloading

1

Использование func_get_args()

func_num_args() сек возвращается значение 0. для цикла в коде не будет работать от $i < $args упрощается до 0 < 0, что неверно.

Для PREVET, что вы можете попробовать использовать:

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