《php何以被戲稱為“世界上最好的語言”?請看它與js的對比!》要點:
本文介紹了php何以被戲稱為“世界上最好的語言”?請看它與js的對比!,希望對您有用。如果有疑問,可以聯系我們。
有位朋友已經自學了幾個月的前端知識,js的基本語法掌握的也不錯,現在因為項目需要想通過php從后臺數據庫哀求數據.他總是問我:php難學嗎?如果我僅僅需要獲取動態數據然后在前端展示,應該從哪里學起?因為要盡快交差,暫時沒時間系統學習.
我只好不斷的跟他解釋:不要把php想的多復雜.既然你只必要php返回數據,那就更簡單了:不需分頁時,10-20行代碼即可搞定;如果有較復雜的邏輯運算,也就是100行左右代碼的事.更何況,你是從前端過來的,有了js基礎再來學php簡直是太容易了.要不然,php何以被廣大網友戲稱為“世界上最好的語言”?
目前正好國慶假期,我就來簡單總結一下php和js之間在語法上的異同:
和js一樣,php也是一種弱類型語言,變量的數據類型由上下文決定.
1、不同點有:
● 聲明變量時,php使用$代替js中的var關鍵字.php中雖然也能使用var,但它只能用于定義類里面的公有屬性.
● php在聲明變量時如果不同時賦值,該變量會被視同未定義而導致程序出錯;js里則可以不賦值,其值為undefined.
2、相同點有:
● 變量名都區分大小寫.好比,$x和$X就是兩個完全不同的變量;
● 都可以使用類似于$x=$y=$z=20的方式同時聲明多個變量.
1、基本類型
php的基本類型數據共有4種,分別是字符串、數值、布爾和null,沒有js中的undefined.
● 字符串(string)
在js中,字符串類型的數據由一個或多個字符組成,并包含在一對單引號或雙引號內.這種定義字符串的辦法在php中同樣適用.
必要注意的是,js中以反斜杠(\)開頭的一些特殊字符(字面量)在php中并沒有效果.例如,\n是表示換行:
$val = "歡迎來到\n'職場碼上匯'";
echo $val;
但瀏覽器的實際輸出中并沒有換行,僅僅在源代碼中進行了換行.如果要在瀏覽器運行時換行,需使用html中的<br>標簽.因為php輸出的內容可以直接嵌入到頁面中顯示,所以各種html標簽在這里都是有效的.
關于php中的字符串類型數據,還要注意以下兩點與js不同的地方:
第一,單引號定義的字符串就是普通的字符串,而雙引號定義的字符串會解析其中的變量.因此,在字符串中沒有包括變量的時候,使用單引號的效率要比雙引號高一點,因為它不會去做任何的解析動作.
第二,php除了可以使用單引號或雙引號來定義字符串外,還可使用界定符.
● 數值(integer和double)
在js中,不論是整數還是浮點數,都屬于數字類型(Number).
而在php中,整數和浮點數是分開的.其中,整數為integer(int),浮點數為double(float).
還有一點與js不同的是,php沒有NaN這個數值用來表示非數.
● 布爾值boolean(bool)
布爾類型的數據只有兩個值:true或者false.
● 空類型NULL
此類型表示什么都沒有.
要判斷一個變量是不是空值,可使用empty函數.
2、數組
在js中,可通過Array()或[]來創建數組,這兩種辦法在php中仍然可以使用.例如:
$val1 = array('red', 'blue', 'green');
$val2 = ['red', 'blue', 'green'];
echo $val1[0]; //red
echo $val2[2]; //green
注意:在php中,array字母大小寫無所謂;而js中的Array第一個字母必需大寫.
通過以上這種方式創建的數組在php中被稱為索引數組.其實,php中更常用的是關聯數組,且功能更加強大.
3、對象
在真正面向對象的編程語言中,提到對象就離不開類(嚴格來說,js也并不是真正面向對象的語言,因為它的語法中沒有類的概念,只能說它是基于對象的語言).
如果采用php的面向過程編程方式(也便是只使用php提供的各種函數),就不用考慮創建類的問題.
在php中拜訪對象的屬性和方法,要使用->操作符;而js中直接使用的圓點符號.
1、獲取數據類型
js使用運算符typeof來獲取指定變量或值的數據類型,php使用的是gettype函數.除此之外,php還可以使用以下類型測試函數:
is_string():是否為字符串;
is_int():是否為整數;
is_double():是否為浮點數;
is_bool():是否為布爾類型;
is_null():是否為空值;
is_array():是否為數組;
is_object():是否為對象.
除以上函數外,is_float()也可用于檢測是否為浮點數;is_numeric()則檢查是否為數字或由數字組成的字符串.
2、強制類型轉換
js中的數據類型轉換是使用String、Number、Boolean等辦法,而php是將要轉換的數據類型名稱以括號括起來放到要轉換的變量或數值前面.可使用的數據類型名稱有:
string:字符串;
integer或int:整型;
double或float:浮點型;
boolean或bool:布爾型;
array:數組;
object:對象;
null:空類型(轉換為空類型數據時需使用unset).
● 關于轉換為數值類型的說明
true轉為數值時變成1,false變成0;空值、空數組轉為數值時變成0;字符串轉為數值時,如果以數字開頭就截取到非數字位,否則為0(類似于js中的parseInt和parseFloat辦法).
● 關于轉換為布爾類型的說明
空值null、空字符串、數值0、字符串0、空數組都被認為是false;其它非空、非零的數值,全部為true.
在js中,字符串0轉為布爾值時返回的是true.這點與php有所不同.
3、數據類型轉換函數
除了可以使用數據類型名稱進行強制轉換外,php還可以使用strval、intval、floatval、doubleval、boolval和settype轉換函數.
和js相同,php中一樣有算術運算符、比較運算符、邏輯運算符和三元運算符,其用法與js基原形同,但也有幾處不太一樣的地方:
1、php有專門的字符串運算符
在js中,運算符+號既可以用于算術運算,也能用于字符串的連接.當+運算符前后有任意的一個值為字符串類型時,則該運算符默認為字符串連接而非加法運算.
但在php中,+號僅用于算術運算,當其前后有非數值類型的內容時,會自動依照上述數值轉換規則轉換后再進行運算.例如:
echo null + 'abc55' + 12 + true + '711.22abc'; //724.22
php有專門的字符串連接符,便是圓點符號,它的作用便是將兩個字符串連接起來,組合成一個新的字符串.
2、邏輯運算符有所增加,且用法也有變化.具體來說:
● 在js中,&&表示“邏輯與”,||表示“邏輯或”.但在php中,表示“邏輯與”的運算符增加到兩個:and或者&&;表示“邏輯或”的運算符也同樣有兩個:or或者||.
● 在js中,當“邏輯與”或“邏輯或”運算符兩邊的返回值不是布爾值時,將自動按布爾值的轉換規則轉換為布爾值后再進行判斷并返回內容.這里返回的內容不是布爾值,而是其對應的原始值.該返回辦法在php中無效,php仍按轉換后的布爾值返回.例如:
var str = '字符串1' || '字符串2';
console.log(str);
上述js代碼中的兩個字符串在轉換成布爾值比擬時都為true,因此輸出的內容是“字符串1”;如果改用&&運算符則輸出“字符串2”.
但如果在php中運行以下代碼:
$str = '字符串1' || '字符串2';
var_dump($str);
則輸出的內容為true.
● 增加了異或(xor)運算符:左右兩邊表達式的值一真一假時,結果為true,否則為false.
3、增加了->、=>、@、``等運算符
->:相當于js中的圓點符號,用于拜訪對象中的屬性和方法;
=>:用于數組中key和value之間的映射,相當于js中給對象屬性賦值的冒號;
@:用于屏蔽表達式可能發生的錯誤,只要在可能發生錯誤的表達式前加上@即可.該運算符只是對錯誤信息進行屏蔽,并沒有真正辦理錯誤;
``:用于運行系統命令.
js中的if、switch、for、while、do…while及break、continue語句,在php中均可正常使用,且語法完全相同;但js中只能寫else if(php還能寫成elseif),js中專門用于遍歷數組和對象的for語句在php中已不能使用,其替代語句為foreach.
除此之外,php對break語句還進行了增強.對于多層嵌套的循環來說,該語句可增加一個參數,用于指定跳出第幾層循環.
當采用“面向過程”的php編程方式時,其最重要的一個特征就是大量的使用函數而不是屬性或辦法.
在php中,函數的定義與調用規則在語法上與js完全一致,且變量作用域和js完全相同:在函數內部聲明的變量為局部變量,其作用域僅限于函數內部;在函數外部聲明的變量為全局變量.
但也有以下不同:
1、全局變量在php的函數內部并不能直接使用,必需在函數內部先用global關鍵字進行聲明(或者使用$GLOBALS全局數組變量).
2、參數傳遞上的不同.在js中,將基本類型數據變量和數組、對象變量賦給另外一個變量的時候,其處理方式是不一樣的:一個是賦“值”,一個是賦“內存地址”,由此就派生出了函數中的“按值傳遞參數”和“按引用傳遞參數”問題.在php中,已經不再存在不同處理方式的問題,但函數中的兩種傳遞方式還是有的.
● 按值傳遞參數:不論是基本類型數據、還是數組,按值傳遞參數的處理辦法都是一樣的.
● 按引用傳遞參數:便是將實參的內存地址傳遞給形參,這時,在函數內部所有對形參的操作都會影響到實參的值.函數返回后,實參的值會發生變化.引用傳遞方式便是函數定義時在形參前面加個&符號.
維易PHP培訓學院每天教你實戰技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養人才。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/6499.html