由於工作需要,需要學習一下PHP,由於3年的C++背景,在剛開始學習PHP的過程中,有些不習慣,經過一段時間的學習,總結了一些PHP與C++的不同。
1.應用場景
在談兩種語言不同的時候,首先需要了解兩中語言的主要語言場景。C++與PHP的應用場景有比較大區別,C++作為一門擁有悠久歷史的語言,已經應用的場景非常廣泛,已經有數不清的項目使用C++。由於閱歷有限,目前想起來的C++主要的應用場景有:對性能有要求的服務器,游戲的渲染引擎,一些和硬件打交道的場景(例如和一些電表通信),以及眾多的C++遺留(mfc等等)項目。而PHP主要是用在服務器腳本程序,用於web。
2.編譯器的解釋方式
C++是一門靜態語言,需要先進行編譯,產出程序才能執行,C++的類型是固定的。而PHP則不同,是一門動態語言,邊解釋變運行,同時PHP也是弱類型語言,即“變量的類型通常不是由程序員設定的,確切地說,是由 PHP 根據該變量使用的上下文在運行時決定的”。
3.類型轉換
對於C++來說,不同類型的聯系需要顯式的轉換,例如使用“流”,直接”string = int + string”是行不通的,同時轉換的時候也有嚴格的檢查,例如一個”1ad_>”string轉換為int,是會拋出異常的,(string並不是C++的內建類型);而對於PHP,先前的轉換可以將”1ad_>”轉換為1,因為PHP的字符串轉換為integer的原則如下:“該字符串的開始部分決定了它的值。如果該字符串以合法的數值開始,則使用該數值。否則其值為 0(零)。合法數值由可選的正負號,后面跟着一個或多個數字(可能有小數點),再跟着可選的指數部分。指數部分由 'e' 或 'E' 后面跟着一個或多個數字構成“。鏈接在此:http://cn2.php.net/manual/zh/language.types.type-juggling.php。
4.數組的處理
對於C++來說,數組是一個危險的存在(這點和c一樣),因為沒有越界檢查,在聲明的時候需要確定數組的類型和長度(這樣編譯器就確定為其分配多少內存)。而對於PHP來說,數組更像C++中的map,寫入的時候若沒有對應的鍵值,會添加此鍵值,但是若讀取的時候沒有此鍵值的話,就會報出錯誤。
5.賦值
對於C++和PHP來說,變量1=變量2是相同的,都是為變量1重新分配了內存。而對象之間的賦值就不同了,C++兩個對象的賦值直接使用”=“,即”operator=()“,例如obj1 = obj2,是將obj2的內容全部拷貝到obj1里面,而PHP直接使用”=“類似於C++的引用賦值,obj1並沒有分配內存,只是指向obj2的內容,要完全復制需要使用clone關鍵字。
另外在接觸PHP的實例化的時候,發現PHP示例化對象也很有趣,在手冊中有一個實例化的例子:
<?php $className = 'Foo'; $instance = new $className(); // Foo() ?>
這就是動態語言的好處。
以上只是簡單的幾點總結,還是感到自己的水平很有限,略失落。