我想寫一個函數,將採取任何數量的參數,並將返回第一個參數,按順序,這是有效的(在我的情況!空)。PHP功能級聯通過靈活數量的全/空值
我已經能夠很好地工作,我想如何,除了我因爲未定義的變量而得到一些通知。請參見下面的例子:
function cascade()
{
if (func_num_args() < 1) return false;
foreach (func_get_args() as &$arg) {
if (!empty($arg)) return $arg;
}
return false;
}
你可以看到,我試圖宣佈在foreach的每個$arg
按引用傳遞,但是這似乎並沒有做的伎倆。
要闡述我計劃如何使用此功能,見下圖:
$a = 'a';
$c = 'c';
echo cascade($z, $b, $a, $c);
由於$z
和$b
是不確定的,在列表中的第一個非空的變量是$a
所以輸出a
預期。然而,你然後得到未定義的變量通知,我想擺脫。
我知道我只能說echo @cascade($z, $b, $a, $c);
這將抑制錯誤,但我想知道是否有解決此問題的方法,以便可以通過某種方式傳遞引用。有什麼想法嗎?
編輯:
爲了進一步突出了什麼我想acheive,請參見下面的函數,它的工作沒有引發錯誤,即使通過了未定義的變量:
// returns default value if input variable is not set
function ifset(&$var, $default = false) {
return isset($var) ? $var : $default;
}
有了這個函數,如果參數1未設置,則返回參數2中的默認值。無論哪種方式,都不會引發錯誤。
我所試圖實現的是同樣的結果,但隨着參數的任何數量,因爲該功能僅限於1,除非我窩他們(變得混亂)。
現實生活中的例子:
這就是爲什麼我想要這個功能,我將如何使用它在一個真實的生活場景:如果我們有一個訂單
<input type="text" name="customerName" value="<?= cascade($order->fullName, $currentUser->fullName, 'Anonymous') ?>">
所以本作中,並有可從一個名字,我們使用的是,如果該信息有尚未保存,我們使用登錄用戶名作爲默認值,如果沒有人登錄,我們使用「匿名」 。
不正是我會做在現實生活中,但也許它突出例如使用?
對於那些建議定義變量以減輕錯誤的人,這個函數的作用點是通過一系列的值來工作,優先考慮那些先來的,然後轉向下一個,如果這是'空「等,直到最後如果所有內容都爲空,則返回FALSE默認值。
只是聲明$ z,$ b並給它們一個空值,比如'null,「,」,0,..'這是擺脫未定義錯誤的唯一方法,仍按預期工作 – yoeunes
在這種情況下,在傳遞它之前是否有某個原因不會將$ z等定義爲某個空值? – HairMachine
或者使用'echo cascade'($ z ??'',$ b ??'',$ a ??'',$ c ??'');'如果你使用php 7 – yoeunes