2017-02-14 71 views
0

我嘗試使用下面的函數在PHP中,如果它已經被設置爲呼應變量或呼應替代文本:爲什麼通過refrance傳遞在PHP中的通知消息?

function _echo(&$var, $alt = ''){ 
    if (isset($var)){ 
     echo $var; 
    } else { 
     echo $alt; 
    } 
} 

而下面的代碼來調用該函數。需要注意的是$計劃之前,沒有定義:

<input type="text" name="test" value="<?= _echo($plan['program']) ?>"> 

但它觸發:

注意:未定義指數:程序[文件]就行[行]

我試過下面的代碼來找出問題並且這是意外的,$函數被調用時定義了$ plan:

var_dump($plan); 
<input type="text" name="test" value="<?= _echo($plan['test']) ?>"> 
var_dump($plan); 

和輸出是:

說明:未定義變量:行計劃在[文件] [行]說明:

未定義指數:程序在[文件]在線路[行] >>這裏NULL被呼應

陣列(1){[ 「程序」] => NULL}

什麼是完全的問題,我怎樣才能使這種功能?

+1

[PHP: 「通知:未定義的變量」, 「通知:未定義指數」 和 「通知:未定義抵消」]的可能的複製(http://stackoverflow.com/問題/ 4261133/php-notice-undefined-variable-notice-undefined-index-and-notice-undef) –

回答

1

問題不在於通過引用傳遞參數,而是在引用不存在的數組索引或不存在的變量。你將不得不使用isset()

<input type="text" name="test" 
value="<?= _echo(isset($plan['program']) ? $plan['program']: '') ?>"> 
+0

那是不是有任何方法在函數本身中實現這種驗證? – asDca21