看板 PHP 關於我們 聯絡資訊
: 因為我之前是寫Java的 Java 算是強型別的程式語言 (strong type) 而 PHP 則是弱型別 (weak type) 二者不太能互相比較 : 但是在PHP內 : 變成是要直接給變數然後給值初始化 : 如果沒有給值就等於null : $x; //這樣有寫跟沒寫一樣,值也是null : $x = 10; //正常 寫個程式做檢查,這邊先把 error_reporting 打開: <?php error_reporting(E_ALL); var_dump($x); 執行後會出現訊息: PHP Notice: Undefined variable: x in /home/johnroyer/tmp/qwe.php on line 5 NULL 所以其實 PHP 是會檢查變數是否有被初始化的 只是即使沒有被初始化也是可以照常拿來使用 .... 然後可能就踩到雷 XD 例如拿沒有初始化的變數去其他函式使用: $list = [1, 2, 3]; array_merge($list, $undefined); 語法上來講沒有任何問題 但是執行的時候就會有 runtime error : PHP Warning: array_merge(): Argument #2 is not an array 以個人經驗 如果希望程式可以避開 runtime error 的話 建議會拿來做判斷、運算的變數最好都先初始化 並且指定正確的資料型態 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 211.72.229.31 ※ 文章網址: https://www.ptt.cc/bbs/PHP/M.1510720665.A.045.html ※ 編輯: JohnRoyer (211.72.229.31), 11/15/2017 12:46:11
ericdoctor: 謝謝你的回文 我理解強型態與弱型態語言,因為本身是F 11/15 15:53
ericdoctor: 2E,所以也有寫js,只是不太懂在PHP,宣告並賦值的行 11/15 15:53
ericdoctor: 為應該怎麼用語言描述 11/15 15:53
ericdoctor: 原來要把error_reporting打開才會看到error,謝謝告知 11/15 15:57
ericdoctor: ,我也有爬文到相關的用法是說要使用前要先初始化,我 11/15 15:57
ericdoctor: 也認同這一點,但是不知道有沒有建議的寫法(比如說我 11/15 15:57
ericdoctor: 今天想用整數要先賦的值是0,想用字串就要先給空字串) 11/15 15:57
ericdoctor: 或是有什麼關鍵字或資源可以跟原po請教 11/15 15:57
MOONRAKER: 當然是要當什麼用就設什麼啊 初值設0.0下面當字串用 11/15 16:03
MOONRAKER: 你是參加IOCCC嗎 11/15 16:03
ericdoctor: 我具體講一下我的問題好了 11/15 18:43
ericdoctor: 不好意思 這邊用Java表示 11/15 18:43
ericdoctor: 有時候會這樣寫 11/15 18:43
ericdoctor: int x; 11/15 18:43
ericdoctor: if(條件){ x =10;}else if(){ x=11;} 11/15 18:43
ericdoctor: 但是php只要 11/15 18:43
ericdoctor: if(條件){ $x =10;}else if(){ $x=11;} 11/15 18:43
ericdoctor: 揪能正常使用,不知道這樣的寫法是好的還是不好的 11/15 18:43
tkdmaf: 樓上,你的寫法會引發nil的問題吧。 11/15 21:36
tkdmaf: 你這樣萬一二個條件都不對不就崩了? 11/15 21:37
ericdoctor: 的確還要再加上else才完成,我這邊只是省篇幅,抱歉造 11/15 21:53
ericdoctor: 成誤解,主要是想請問這樣變數還有需要在if敘述之前初 11/15 21:53
ericdoctor: 始化嗎? 11/15 21:53
MOONRAKER: 你有執行路徑觀念吧?拿來php也是一樣 11/16 01:51
MOONRAKER: 你確定nested if可以對應到所有狀況 當然可以不要初值 11/16 01:52
MOONRAKER: 你不太確定 或者想保平安 像開車門之前先看後面一樣 11/16 01:53
MOONRAKER: 那就把初值寫在前面 這樣起碼有個fail-safe 11/16 01:55
MOONRAKER: 要考慮一下 這個code將來可能會交給別人 那時他會怎麼 11/16 01:59
MOONRAKER: 修改 會不會在else後面再加東西讓他不能涵蓋所有狀況 11/16 02:02