我不斷收到這是一個警告我要避免收到此警告,當它是頭也不回警告關閉PHP未定義的變量:article_id的
這裏不確定的是在這之前你的代碼放在上下文
$url_items = array("foo");
$article_id = db_escape($url_items[1]);
$article = get_article($article_id);
function get_article($article_id = NULL) {.....}
我不斷收到這是一個警告我要避免收到此警告,當它是頭也不回警告關閉PHP未定義的變量:article_id的
這裏不確定的是在這之前你的代碼放在上下文
$url_items = array("foo");
$article_id = db_escape($url_items[1]);
$article = get_article($article_id);
function get_article($article_id = NULL) {.....}
我認爲最簡單的方法來解決這個問題是這樣的:
$url_items = array("foo");
$article = empty($url_items[1]) ? get_article() : get_article(db_escape($url_items[1]));
function get_article($article_id = NULL) {.....}
這應該工作,因爲你給$article_id
一個默認值的函數。但是,如果不存在$article_id
,如果完全不想執行,則可以輕鬆地將中間三元組更改爲null。
編輯:如果你有一個article_id的0,你可能要更改empty
到!isset
編輯2:修改,以避免不確定的偏移警告。
這是完全錯誤的,但尤其是在這種情況下。爲什麼不E_ALL? – 2010-03-23 14:22:47
,因爲E_ALL仍然會顯示錯誤? – Iraklis 2010-03-23 14:25:38
Ahaha,我以爲你會幫助找到錯誤,而不是隱藏它:)它只是沒有出現在我的腦海裏。開發者多麼荒謬的答案。 – 2010-03-23 14:28:29
我認爲這將是一個更好的方式也許有一個更好的辦法,但我認爲只是隱藏警告是錯誤的方式...
$article_id = db_escape($url_items[1]);
if(empty($article_id)){
$article_id = null;
}
編輯糾正代碼
您不會確切地說哪一行導致錯誤,但您應該使用isset
來表示您不確定存在的任何變量。例如:
$url_items = array("foo");
if (isset($url_items[1]))
{
$article_id = db_escape($url_items[1]);
$article = get_article($article_id);
}
function get_article($article_id = NULL) {.....}
您還需要檢查db_escape
方法的內容,在情況下做的也有不確定變量的東西。
解決此問題的另一種方式是通過使用參考的&
變量傳遞給函數:
function get_article(&$article_id) {
if ($article_id == null) {
// handle null case here
}
else {
// get the article
}
}
稀釋是,但我可能是一個問題仍然需要打電話給get_article,即使$ article_id沒有設置 – mcgrailm 2010-03-23 14:58:05
@ mmcgrail:是的我給你的代碼嘗試,但沒有得到任何警告。但我確實得到了'注意:未定義偏移:1'。我唯一一次得到「未定義變量」是,如果我刪除設置'$ article_id'的行。你確定你的代碼和你上面發佈的一樣嗎?發佈'db_escape()'的內容也會有所幫助。 – DisgruntledGoat 2010-03-23 15:03:20
是的,你的權利我也得到了一個,我仍然無法看到db_escape與它有什麼關係。但這確實使我得到了答案 – mcgrailm 2010-03-23 15:12:10
所以它畢竟是非常簡單的,是的,也許我可以更好地表述我的問題,但它仍然困擾着我,有沒有做到這一點
if (isset($url_items[1])){
$article_id = db_escape($url_items[1]);
}else{
$article_id = null;
}
$article = get_article($article_id);
一個更簡單的方式很奇怪,因爲'$ article_id = db_escape($ url_items [1]);'應該爲'$ article_id'賦值。我認爲警告甚至不應該發生(或者它在你的代碼中的其他地方)。 – 2010-03-23 14:21:27
嗯你的權利沒有提到這一點......我不熟悉db_escape()是否會返回一些東西呢?或更好的它總是會返回一些東西...嗯好吧,只是測試它的功能將返回null如果沒有返回,所以這個函數怎麼可能返回任何東西? – Nexum 2010-03-23 14:35:16
PHP通常在發出警告時提供文件和行號。這不應該足以發現問題嗎? – lunohodov 2010-03-23 14:35:48