Re: [請益] PHP變數宣告

作者: JohnRoyer (Zero 日落)   2017-11-15 12:37:41
: 因為我之前是寫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 的話
建議會拿來做判斷、運算的變數最好都先初始化
並且指定正確的資料型態
作者: ericdoctor (小黑)   2017-11-15 15:53:00
謝謝你的回文 我理解強型態與弱型態語言,因為本身是F2E,所以也有寫js,只是不太懂在PHP,宣告並賦值的行為應該怎麼用語言描述原來要把error_reporting打開才會看到error,謝謝告知,我也有爬文到相關的用法是說要使用前要先初始化,我也認同這一點,但是不知道有沒有建議的寫法(比如說我今天想用整數要先賦的值是0,想用字串就要先給空字串)或是有什麼關鍵字或資源可以跟原po請教
作者: MOONRAKER (㊣牛鶴鰻毛人)   2017-11-15 16:03:00
當然是要當什麼用就設什麼啊 初值設0.0下面當字串用你是參加IOCCC嗎
作者: ericdoctor (小黑)   2017-11-15 18:43:00
我具體講一下我的問題好了不好意思 這邊用Java表示有時候會這樣寫int x;if(條件){ x =10;}else if(){ x=11;}但是php只要if(條件){ $x =10;}else if(){ $x=11;}揪能正常使用,不知道這樣的寫法是好的還是不好的
作者: tkdmaf (皮皮快跑)   2017-11-15 21:36:00
樓上,你的寫法會引發nil的問題吧。你這樣萬一二個條件都不對不就崩了?
作者: ericdoctor (小黑)   2017-11-15 21:53:00
的確還要再加上else才完成,我這邊只是省篇幅,抱歉造成誤解,主要是想請問這樣變數還有需要在if敘述之前初始化嗎?
作者: MOONRAKER (㊣牛鶴鰻毛人)   2017-11-16 01:51:00
你有執行路徑觀念吧?拿來php也是一樣你確定nested if可以對應到所有狀況 當然可以不要初值你不太確定 或者想保平安 像開車門之前先看後面一樣那就把初值寫在前面 這樣起碼有個fail-safe要考慮一下 這個code將來可能會交給別人 那時他會怎麼修改 會不會在else後面再加東西讓他不能涵蓋所有狀況

Links booklink

Contact Us: admin [ a t ] ucptt.com