PHP是Hypertext Pre-Processor(超文本預處理器)的縮寫,它是一種服務器端的HTML腳本/編程語言。PHP語法上與C類似,可運行在Apache, Netscape/iPlanet, 和 Microsoft IIS Web 服務器上。c++
PHP與Java的區別:算法
PHP具備和JAVA相似的Class關鍵字。由於不須要虛擬機,以至速度比JAVA快5倍。數據庫
PHP與Javascript的區別:編程
PHP容許你直接在HTML文件裏寫入簡單的腳本,這一點與Javascript很是類似。而不一樣的是,PHP不依賴於瀏覽器,是服務器端的語言,讀取數據庫把內容顯示到頁面;而Javascript倒是一種客戶端的嵌在HTML中的語言,控制頁面內容。數組
Javascript與Java的區別瀏覽器
1. 由不一樣公司開發的。Java是Sun Microsystems公司的產品;JavaScript是Netscape公司的產品,Java是通過Sun Microsystems公司受權的。服務器
Java與C++的區別:app
1. 徹底面向對象,好比:main函數以static的形式包含在類中編程語言
2. Java跨平臺,即不一樣的操做系統均可以經過JVM來解釋Java程序,而C、C++、C#則是與平臺相關的,有些指令只在某些操做系統中才能執行;函數
3.Java不支持系統調用,即沒法與操做系統進行交互,這是由它跨平臺的特色決定的,而C則能夠調用系統中的指令,如fork()。這也就是爲何Java中只有線程(Thread)概念而沒有進程(Process)概念,而C二者均有;
4. Java沒法對內存進行控制,而C則能夠經過指針對內存進行人爲分配(JAVA中沒有指針, 但Java中全部的對象都是以地址訪問的)。
5. 類的默認成員是protect(C++中是private)
6. C++中string至關於Java中的StringBuff;C++中const string至關於Java中的String。也就是說,C++中的string可變,而Java中String不可變。 因此在Java中使用+操做合併字符串時,實際上是從新申請了新空間,把兩個字符串賦值給新空間。
7. Java的數組在聲明時不能直接指定列數或者行數,好比String s[50]是錯誤的。正確的作法是:
String s[] = new String[50];
8. 垃圾回收機制的區別。C++用析構函數回收垃圾,Java自動回收(GC算法),寫C和C++程序時必定要注意內存的申請和釋放。
9. Java用接口(Interface)技術取代C++程序中的多繼承性,省卻了多繼承在實現和維護上的複雜性。
C++與C的相互調用
1. extern 「C」的使用(僅在C++中,C中只有extern)
1)在C++中使用C語言定義的語句。
/* c語言頭文件:cExample.h */ #ifndef C_EXAMPLE_H #define C_EXAMPLE_H extern int add(int x, int y); //在C語言的頭文件中,對其外部函數指定爲extern #endif /* c語言的實現文件:cExample.c */ #include "cExample.h" int add(int x, int y) { return x + y; } /* c++實現文件,調用add:cppFile.cpp */ extern "C" //在C++中使用extern "C"{}包裹C頭文件或者C語言編寫的.DLL { #include "cExample.h"; } int main(){ add(2, 3); return 0; }
2)C中引用C++語言中的函數或者變量時,C++的頭文件須要加上extern 「C」,而且C中還需將C++中定義的extern 「C」函數聲明爲extern類型
/* c++頭文件cppExample.h */ #ifndef CPP_EXAMPLE_H #define CPP_EXAMPLE_H extern "C" int add(int x, int y); //C++的頭文件須要加上extern "C" #endif /* c實現文件cFile.c */ extern int add(int x, int y); //C中將C++中定義的extern "C"函數聲明爲extern類型。 int main() { add(2, 3); return 0; }
2. 爲何須要extern "C"
C編譯器編譯函數時不帶參數的類型信息,如 int foo( float x ) ,C編譯器會將此函數編譯成相似_foo的符號.
而C++編譯器爲了實現函數重載,會在編譯時帶上函數的參數信息。如它能夠把上面的函數編譯成相似於_foo_float這樣的符號。
使用extern "C"則是告訴編譯器依照C的方式來編譯封裝接口
3. C怎麼調用C++中的重載函數
C++中必須封裝單獨的接口共C調用
// C++ Code void foo( int x ); void foo( float x ); extern "C" void foo_i( int x ) { foo( x ); } extern "C" void foo_f( float x ) { foo( x ); } // C Code extern void foo_i( int x ); extern void foo_f( float x ); void ccc( int x1, float x2 ) { foo_i( x1 ); foo_f( x2 ); // ... }
4. 若是C中想調用C++中的成員函數(包括虛函數),則須要提供一個簡單的包裝(wrapper)
// C++ code: class C { ... virtual double f(int); }; extern "C" double call_C_f(C* p, int i) // wrapper function { return p->f(i); } //C code extern double call_C_f(struct C* p, int i);//聲明 void ccc(struct C* p, int i) { double d=call_C_f(p,i); ... }