2013-05-29 90 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!'); 
}