可選參數我有一個功能,它有四個可選參數:問題與PHP
public function doSomething($x = null, $y = null, $a = null, $b = null) { }
然而,當我嘗試調用該函數,例如僅指定$ Y:
$object->doSomething($y=3)
它似乎忽略了我將$ y設置爲3,而將$ x設置爲3.是否有任何理由說明PHP可能會發生這種情況?我從來沒有使用過有這個問題之前......
感謝,
丹
可選參數我有一個功能,它有四個可選參數:問題與PHP
public function doSomething($x = null, $y = null, $a = null, $b = null) { }
然而,當我嘗試調用該函數,例如僅指定$ Y:
$object->doSomething($y=3)
它似乎忽略了我將$ y設置爲3,而將$ x設置爲3.是否有任何理由說明PHP可能會發生這種情況?我從來沒有使用過有這個問題之前......
感謝,
丹
您必須傳遞參數的順序,你在你的方法簽名聲明,無論他們是否可選。這意味着您必須在$y
之前指定$x
,無論如何。
如果您不需要傳遞$x
的任何其他值,則必須傳遞null值。當然,您仍然可以跳過其餘的可選參數:
$object->doSomething(NULL, 3)
此外,PHP不支持命名參數。因此,您不能在調用代碼中明確寫入$y
,因爲在PHP中實際上在調用代碼的範圍內設置了$y
,而不是在doSomething()
的方法體的範圍內。
編輯:每DPK的建議,作爲替代路線可以改變的方法來接受的散列(關聯數組)代替,以及任選地覆蓋某些默認值和extract()
入範圍的它的值:
public function doSomething(array $args = array()) {
$defaults = array('x' => NULL, 'y' => NULL, 'a' => NULL, 'b' => NULL);
extract(array_merge($defaults, $args));
// Use $x et al as normal...
}
在您的調用代碼:
$object->doSomething(array('y' => 3));
即使$ x是可選的,位置也不是那麼$ Y需要在第二個參數。試試:
$object->doSomething(null,3);
沒錯。按照OP的預期,這樣做的方式是傳遞一個散列作爲參數(array('y'=> 3))或一些類似的數據結構(object ..) – 2010-10-13 21:48:27
感謝你 - 出於某種原因,我處於假設你可以做我正在做的事情。一定是另一種語言悄悄進入! – Dan 2010-10-13 21:58:47