2016-09-26 237 views
0

獲取變量未定義的錯誤,當我把字符串函數替換代碼PHP未定義的變量PHP函數

婁代碼顯示未定義dataemail, AND $datafname但SESSION的用戶名是好的,也當我嘗試回聲這個dataemail, AND $datafname它顯示已登錄用戶電子郵件和全名

<?php 
function mentioned($input_str){ 
    $input_str = strip_tags($input_str); 
    $input_str = htmlentities($input_str); 

    $wordInString = array('@[email protected]','@[email protected]','@[email protected]'); 
    $replaceInString = array($_SESSION['username'], $dataemail, $datafname); // the error is from here 
    return str_replace($wordInString, $replaceInString, $input_str); 
} 
$match_user = mentioned($info_body); 
?> 

該婁代碼工作良好,沒有錯誤,但我需要它在一個函數代碼,所以我可以在任何地方重複使用它,而無需再次對其進行編碼

<?php 
      $string = $info_body; 
      $wordInString = array('@[email protected]','@[email protected]','@[email protected]'); 
      $replaceInString = array($_SESSION['username'] ,$dataemail,$datafname); 
      $match_user = str_replace($wordInString, $replaceInString, $string); 
echo $match_user; 
?> 
+0

'$ dataemail,$ datafname'沒有在函數範圍內定義。 –

+0

定義你的'變量' – Karthi

回答

1

默認情況下,PHP函數無權訪問全局變量,因此您的函數看不到兩個「數據」變量。

最好的解決辦法是將它們傳遞作爲參數:

function mentioned($input_str, $dataemail, $datafname){ 
    $input_str = strip_tags($input_str); 
    $input_str = htmlentities($input_str); 

    $wordInString = array('@[email protected]','@[email protected]','@[email protected]'); 
    $replaceInString = array($_SESSION['username'], $dataemail, $datafname); // the error is from here 
    return str_replace($wordInString, $replaceInString, $input_str); 
} 
$match_user = mentioned($info_body, $dataemail, $datafname); 

另一個解決方案是將它們聲明爲全局的功能之上,但是這將讓你的代碼少可重複使用的,更難請謹慎使用:

function mentioned($input_str){ 
    global $dataemail; 
    global $datafname; 
    ... 
+0

所以如果我有10個更多的變量來取代我將不得不通過他們所有的時候得到輸出也像你一樣? – Alex

+0

是的,很多,但你可以將它們分組在一個關聯數組中。這意味着每次更改變量數量時都不需要更改函數簽名。您也可以從函數內循環該數組以減少代碼重複。 –