2014-09-04 44 views
1

下面的代碼傳遞...嚴格的標準:只有變量應參照地渡過陣列

$msgArr = split("\n", $message); 
$newMsg = ""; 
foreach ($msgArr as $msg){ 
    if (trim(end(split(":", $msg))) != '') 
     $newMsg .= $msg . "\r\n"; 
} 

似乎產生錯誤:嚴格的標準:只有變量應參考在傳遞的/ home/siteurl/public_html/questionnaire/full_questionnaire_submitted.php on line 1033

任何想法爲什麼這樣?

非常感謝提前。

回答

2

遵循嚴格的標準,您只應將變量傳遞給end()而不是直接返回函數的值。這是因爲end()通過引用消耗它的參數。 (請@ NiettheDarkAbsol的很好的解釋)

這條線:

if (trim(end(split(":", $msg))) != '') 

應該是:

$pieces = split(":", $msg); 
if (trim(end($pieces)) !== '') 
+0

解決了我的問題!非常感謝。 – user2091936 2014-09-04 15:24:58

+0

歡迎您! – hek2mgl 2014-09-04 15:39:21

1

最終的功能移到你傳遞作爲參數數組的指針,你的情況,你通過分裂的歸來,女巫不能通過引用傳遞。

1

end()具有以下特徵:

mixed end (array &$array) 

因此,需要參考作爲它的參數。引用通過指向變量來工作,而不是複製變量的值(通常情況下是這樣),這意味着您不能直接將函數的返回值傳遞給它,因此會導致錯誤。

PHP已被編程爲優雅地處理這種事情,因爲它是創建一個內部臨時變量的簡單事情,因此它將繼續工作,但您將得到嚴格標準錯誤。

既然你想從最後:到字符串末尾修剪文本,可以考慮:

$lastpiece = trim(substr(strrchr($msg,":"),1)); 

這使用strrchr得到一切從最後:到最後,substr歇工那最後:,最後trim明明。

+0

很好的答案! .. – hek2mgl 2014-09-04 14:00:32

相關問題