2010-02-15 72 views
2

構造函數的最佳方式是什麼?函數的參數可以爲null?PHP函數定義,空參數

function newDate($day, $time = null, $overRide) { 

     Do something with the variables 

    } 

# newDate('12', '', 'yes'); 

難道是簡單地重組功能如下:

function newDate($day, $overRide, $time = null) { 

     Do something with the variables 

    } 

# newDate('12', 'yes'); 

回答

2

它更好地界定default parameters在函數聲明的末尾..

在中央具有可爲空或默認參數時

,呼籲看起來像:

newDate($someDay, null, $override); 

但在末端默認參數,提供了一個簡單的函數調用:在時間

newDate($someDay, $override); // null is passed for $time 
+2

這不是風格問題,而是語言支持問題。 PHP僅支持參數列表末尾的可選參數。 – pgb 2010-02-15 18:18:17

0

的問題不是參數可以爲空。任何參數都可以爲null,只需將它傳遞給函數即可。這裏造成困難的原因是默認值。帶有缺省值的參數必須在最後,因爲編譯器更簡單地假定它們之前的任何內容都是固定參數的一部分。

5

我不認爲你有選擇,實際上。

默認參數應該是你函數中的最後一個參數。否則,當您撥打newDate(1, 2)時,PHP會將其變爲newDate(1, 2, null),您可能需要newDate(1, null, 2)

查看PHP的documentation on function arguments

1

你所概述的(即:在所需要的參數之後移動可選的參數)只有在參數的'流'仍然有意義時纔有意義。 (即:只有當他們不需要按照特定的順序纔有意義)。但是,它仍然是實現目標的最佳方式。

這就是說,如果有可能大量的可選參數,它可能是一個想法,接受一個可選的陣列,其將包含可選ARGS的關鍵=>值對來檢查。)

(順便說一下,在你的第一個例子,你真的應該傳遞null而不是「」)。

0

的功能,可以有很多可選的參數目前最好的做法是,對回答者的知識寫入,使用數組僞造命名參數。

function foo($options = array()) { 
    $options = array_merge(array(
    'foo' => 'defaultFoo', 
    'bar' => 'defaultBar', 
    'fuz' => false, 
    'buz' => null, 
), $options); 

    if ($options['fuz']) { 
    return $options['foo']; 
    } 

    return $options['foo'] . $options['bar'] . $options['buz']; 
} 

這是第一次編寫的詳細信息,但在使用該函數時很容易理解,並且樂於擴展。這種方法的這種功效在Symfony 1.4框架中的廣泛使用以及JQuery與JavaScript對象平行使用的方式得到證明。

由於array_merge和數組查找,有一些開銷。