查看完整版本: Undefined variable該怎麼處理?
頁: [1]

ayoweiya2001 發表於 2017-3-13 11:13 AM

Undefined variable該怎麼處理?

各位好,

以下是得到 Undefined variable的部份程式碼
需要先宣告嗎?
php不是沒有變數型別區分嗎?

請問這要怎麼處理呢?

感謝

if(isset($_GET['vid']) && is_numeric($_GET['vid'])){
      $vid = $_GET['vid'];
}

<div></div>

chengpocheng 發表於 2017-3-13 01:42 PM

本帖最後由 chengpocheng 於 2017-3-13 01:45 PM 編輯

我猜測你在if判斷式後有用到變數$vid
但你沒傳送$_GET["vid"]這個變數,導致他找不到$vid這個變數

所以要解決這問題的話,你可以在if判斷式前先去給$vid變數一個值
例如
$vid = "";
if(isset($_GET['vid']) && is_numeric($_GET['vid'])){
      $vid = $_GET['vid'];
}

johnwanz 發表於 2017-3-14 09:42 AM

我猜測, $vid是在if大括號中首次使用, 定義;
之後在if大括號的外面, 才要引用.

個人以為, 應該是區域變數限制. 因為層級不同, 導致區域變數消滅後, 才要引用.

if前面, 先定義$vid, 可以把區域變數的層級往上拉一個大括號, 這樣與if後面的引用, 就同等生命週期了.

ayoweiya2001 發表於 2017-3-14 05:22 PM

回2位大大:
扣掉include那一行不算的話,那段if算是最一開始的了,
然後在if之後程式才開始使用$vid

現在,已經在if前面加了一行 $vid=0;
目前就沒有再出現訊息了。

另外,應該如john大所說的,是scope問題。

感謝2位大大的回答

cswordli 發表於 2017-3-26 05:54 AM

本帖最後由 cswordli 於 2017-3-26 06:01 AM 編輯

小弟拙見,此段CODE應該跟SCOPE無關;在同一份PHP程式碼頁中若程式中未定義FUNCION OR CALSS…等封裝型程式碼時,在執行此份PHP SCRIPT程式碼時所有變數該是同一個SCOPE;也就是IF()執行前跟執行後的SCPOE是同一個。
因此開版大大的問題純粹是PHP偵測到您此份PHP SCRIPT程式碼未定義過$vip變數,不論是放在IF()執行前跟執行後都屬於同等級的SCOPE;但該$vip應該屬於整個PHP SCRIPT需要用到的變數,所以建議放於IF()之外來標明。
我認為在變數在"FUNCTION"或"OBJECT CLASS設定"時來區別「PHP的SCOPE問題」較為妥當(比較明確可切割出全堿變數或區堿變數的SCOPE)。

註:其實版大的IF()條件中也出現了一個Undefined variable : is_numeric($_GET['vid']),但是因為IF前段的isset()必須存在時才會進行比較is_numeric()所以才不會發生Undefined variable。

*小弟拙見若有錯誤,請各先進再做指教。
*PHP 變數SCPOE資訊也可參考 Coyan Lee's BLOG (附件圖片上面有google 縮短網址)
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><br><br><br><br><br><div></div>

notice3 發表於 2017-4-8 01:53 PM

$vid = (isset($_GET['vid']) ? $_GET['vid'] : "");
頁: [1]