PHP和JavaScript都是Web 開發人員經常使用的指令碼語言。但每個都有自己的細微差別和用例。
在這篇文章中,我們將探討PHP與JavaScript兩者之間的差異,以及何時應該在開發專案中使用每種語言。讓我們首先看看這些語言是如何產生的。
- PHP與JavaScript:起源
- PHP和JavaScript的相似之處
- PHP與JavaScript之間有什麼區別?
- WordPress如何使用JavaScript和PHP
- 學習PHP與JavaScript
- PHP與JavaScript -比較表
PHP與JavaScript:起源
PHP是Rasmus Lerdorf於2004年建立的一種開源語言。這個名字來自個人主頁工具——一組Rasmus用來跟蹤對他的網站的訪問的指令碼。
隨著PHP 3.0的推出,該語言有了一個反向首字母縮寫詞:PHP: Hypertext Preprocessor。它現在簡稱為PHP。
JavaScript由Netscape的Brendan Eich於1995年建立,旨在為Web帶來互動性。最初稱為Mocha,後來更名為LiveScript,後來更名為JavaScript,以利用Java語言的流行。
今天,JavaScript正式被稱為ECMAScript,但JavaScript仍然是大多數人所稱的。
因此,這兩種語言已經存在一段時間了。
現在我們將看看它們的其他一些相似之處。
PHP和JavaScript的相似之處
下面我們將從多個方面介紹這兩種程式語言的相似之處:
語言型別
PHP和JavaScript都是指令碼語言。這與Java或C++等“純”程式語言相反。
指令碼語言傾向於解釋而不是編譯。這意味著它們是通過第三方而不是直接翻譯成機器程式碼的。這會影響它們的執行時間。
可以這樣想:假設您想將網頁從您的母語翻譯成納瓦霍語。如果您不懂納瓦霍語,則需要口譯員來幫助您,而且翻譯需要更多時間。
這就是為什麼編譯語言往往比解釋語言更快的原因。
變數型別
另一個共同點是PHP和JavaScript是弱型別的。
這意味著當您使用任何一種語言建立變數時,您都不需要分配其資料型別:它是假定的。
因此,您可以在PHP中編寫以下內容:
$x = 'Hello world'; $y = 'Bonjour le monde';
或者在JavaScript中:
var x = 'Coding is fun'; let y = 'No, honestly';
在兩種語言中,這些變數都將被識別為字串(字符集)。
這與像Java這樣的強型別語言相反,在這種語言中,您必須在宣告時說明使用的變數型別:
int x = 5;
PHP和JavaScript都是動態型別的:換句話說,您可以通過在程式碼中重新定義型別來輕鬆更改型別:
$x = 5;
在PHP中,$x 現在是一個整數。
x = 3.14195;
在JavaScript中,x 現在是一個數字。
因為型別不是在PHP或JavaScript中明確定義的,所以您需要函式來告訴您正在使用的資料型別。
JavaScript有typeof函式可以做到這一點。
PHP有gettype函式來返回變數的型別。將gettype,一個新的,改進的版本get_debug_type,是部分PHP 8版本。
類和物件
PHP和JavaScript最初都不是物件導向的。隨著語言的發展,物件導向被新增到它們中。
2004年PHP 5提供了建立物件和類的能力。
JavaScript直到很久以後才使用物件或類。它們於2015年隨著ES6的引入而進入該語言。
一類是物件的通用分組。
一個物件是與實體屬性(特性)和方法(行為)。
該遊戲龍與地下城(d&d)提供了一個很好的比喻。
一個玩家角色對應一個物件。每個角色都屬於一個角色類別,例如野蠻人、盜賊或巫師。
物件可以具有任意數量的您需要定義的屬性。
因此,角色的屬性可能包括:
- 姓名
- 種族
- 能力(力量、智力、智慧、敏捷、體質和魅力)
- 性格型別(例如大膽、膽小、好奇)
- 陣營(守序,混亂,善良,邪惡)
您可以使用物件方法來檢索有關物件的資訊。
這是一個類和物件定義的PHP程式碼示例:
<?php class Sorcerer { // Define properties public $name; public $race; public $intelligence; // Constructor function for the object // takes 3 arguments, name, race and intelligence function __construct($name, $race, $intelligence) { $this->name = $name; $this->race = $race; $this->intelligence = $intelligence; } # Define object methods // Get the name function get_name() { return $this->name; } // Get the race function get_race() { return $this->race; } // Get intelligence function get_intelligence() { return $this->intelligence; } } // end Sorcerer class // Create a Sorcerer $yensid = new Sorcerer("Yen Sid", "Human", 18); # Output the object properties in the browser echo $yensid->get_name(); echo "<br>"; echo $yensid->get_race(); echo "<br>"; echo 'Intelligence: '; echo $yensid->get_intelligence(); ?>
將此程式碼新增到HTML檔案後,瀏覽器中的輸出應如下所示:
- 顏錫德
- 人類
- 智力:18
您還可以定義方法,這些方法是物件採取的或已對其執行的操作。
在D&D中,它們可能是:
- surpriseAttack()
- disarmTrap()
- castSpell()
- resistPoison()
在物件上執行方法時,結果可能取決於物件的屬性。因此,巫師的學徒物件將無法像經驗豐富的巫師物件那樣有效地施展法術。
市場需求
PHP和JavaScript的另一個共同點是對兩種語言的開發人員都有很高的需求。
使用JavaScript和PHP的開發人員也得到了很好的報酬。
在美國,他們的平均年收入約為80,000美元。
PHP開發人員薪水,Glassdoor.com
JavaScript開發人員薪水,Glassdoor.com
文件
對於PHP或JavaScript的新手來說,不太好的訊息是這兩種語言的官方文件都不是很人性化。它是為有經驗的開發人員而不是初學者編寫的。
您可以在此處檢視每種語言的文件:
JavaScript老師Chris Ferdinandi感嘆缺乏良好的JavaScript文件,稱這是他花了這麼長時間才掌握這門語言的原因之一。
此時,您可能想知道,“PHP與JavaScript之間有什麼區別?” 實際上,有幾個。
PHP與JavaScript之間有什麼區別?
接下來我們一起來看看這兩種程式語言之前的不同點有哪些?
伺服器端與客戶端指令碼
PHP 是一種伺服器端指令碼語言。這意味著它在Web伺服器上執行,而不是在客戶端計算機上執行。
伺服器端程式設計對於向使用者提供動態內容(通常來自資料庫)非常有用,例如使用者登入時的歡迎訊息(Hi, Claire!)。
更嚴重的是,伺服器端指令碼用於電子商務。例如,有超過100個WooCommerce擴充套件程式通過API(應用程式程式設計介面)連線到不同的支付提供商以處理交易。
JavaScript是一種客戶端語言,因此它可以在使用者的膝上型電腦、手機或平板電腦上執行。
JavaScript可以操作代表文件物件模型的DOM,您可以將其視為由網頁的HTML形成的樹狀結構。
如果您曾經遇到過手風琴或切換開關,也許是作為常見問題外掛的一部分,您就會看到客戶端JavaScript的執行情況。當您單擊或點選問題時,JavaScript事件處理程式會開啟或關閉CSS顯示或可見性屬性,顯示或隱藏相關答案。
前端與後端
PHP執行在網站的後端——訪問者看不到的部分!在WordPress中,這意味著PHP在Web伺服器和WordPress管理員中完成所有工作。
JavaScript傳統上在前端執行,但在2009年啟動後端執行時Node.js時,情況發生了變化。今天,JavaScript是真正的全棧語言。
與其他語言的結合
PHP作為後端語言,它是LAMP堆疊(Linux、Apache、MySQL、PHP)的一部分。
PHP可以與HTML合併。您將通過檢查許多Web應用程式(包括 WordPress)的程式碼來了解這一點。
以下是來自2020主題index.php檔案的示例:
<header class="archive-header has-text-align-center header-footer-group"> <div class="archive-header-inner section-inner medium"> <?php if ( $archive_title ) { ?> <h1 class="archive-title"><?php echo wp_kses_post( $archive_title ); ?></h1> <?php } ?> <?php if ( $archive_subtitle ) { ?> <div class="archive-subtitle section-inner thin max-percentage intro-text"><?php echo wp_kses_post( wpautop( $archive_subtitle ) ); ?></div> <?php } ?> </div><!-- .archive-header-inner --> </header><!-- .archive-header -->
但是,如果您在Web應用程式中將PHP與其他後端語言混合使用,則很難維護它們。另外,您不僅要了解PHP,還必須學習並熟練掌握其他語言!
JavaScript開發人員在編寫程式碼時有更多的自由。他們可以將這種語言與HTML、XML和Ajax結合使用。
區分大小寫
區分大小寫是在語言中命名實體時區分大小寫字母。
PHP部分割槽分大小寫。大小寫對某些事情很重要,對其他事情不重要。
PHP變數是區分大小寫的。
因此,如果您在PHP中建立一個變數:
$dog = "chihuahua";
並嘗試稍後在您的程式碼中獲取$DOG的值,它將不起作用。
但是,PHP函式不區分大小寫。
如果您在PHP中建立此函式:
function dogFetch() { // your code to run when the function is called }
稍後在您的程式碼中呼叫DogFetch(),您的函式仍將執行。
然而,這不是好的編碼習慣,因為它不一致。
另一方面,JavaScript完全區分大小寫。因此,稱為 beagle、BEAGLE和Beagle的變數都將彼此不同。
句法
語法是管理語言的一組規則。這包括詞序、語法和標點符號。
在英語中,我們可能會說:
I ate my soup slowly.
但如果你是Yoda大師,你會說:
My soup slowly I ate.
為什麼?語法不同。同樣的話,不同的順序。
有些語言使用看起來相同的詞,但它們具有不同的含義。
Lui在法語中的意思是“him”在英語中的意思
Lui在義大利語中的意思是英語中的“he”
如果我們使用錯誤的詞,人類會很寬容,但計算機卻是字面上的。如果我們在程式設計語法中犯了錯誤,計算機通常不知道我們的意思,這通常會導致錯誤。
在JavaScript和PHP中,對於單行程式碼註釋,它們都具有相同的雙正斜槓語法:
// This is a comment
但是PHP也有另一種形式的註釋語法:
# This is a comment
如果您嘗試在JavaScript中使用 PHP 註釋語法,則會出現錯誤:
# This is a Comment Uncaught SyntaxError: private fields are not currently supported
JavaScript未捕獲的語法錯誤
其他語法錯誤對於JavaScript和PHP都是常見的,例如:
- 程式碼行末尾缺少分號 (;)。
- 不為條件語句使用一對花括號 {}。
變數和常量定義
正如我們之前看到的,JavaScript和PHP有不同的宣告變數的方式。
他們也以不同的方式定義常量。
JavaScript使用以下語法:
const x = 6;
對於像這樣的簡單常量,其值以後無法更改。
而PHP對常量使用 define() 函式。
define(name, value, case-insensitive)
按照慣例,PHP常量的樣式是大寫的。一個例子是:
define('MONSTER', 'Sulley');
括號內的前兩個引數是不言自明的。
第三個不區分大小寫,預設值為false。只有當它設定為true時,常量才會不區分大小寫。
那是:
define('MONSTER', 'Sulley', true);
陣列
陣列是可以儲存不止一件事的變數。
在PHP中,陣列是關聯陣列或有序對映。也就是說陣列中的項有相關的鍵值對。
<?php $array( key => value, key2 => value2, ... )
下面是一個不太抽象的例子,其中鍵是名字,值是姓氏。
<?php $array = array( "Frodo" => "Baggins", "Sam" => "Gamgee", "Merry" => "Brandybuck", "Pippin" => "Took", );
為方便使用,可以將PHP物件轉為陣列,將陣列轉為物件。
但是,JavaScript只能擁有帶有編號索引的陣列。例如:
var mountains = [ "Everest", "Kilimanjaro", "Fuji" ];
要檢索值,您必須引用 0開始的陣列索引。
var mountain = mountains[1];
JavaScript不支援帶有命名索引的關聯陣列。
資料庫整合
PHP可以出色地完成的一件事是連線到資料庫。PHP與MySQL或MariaDB整合得特別好,WordPress都使用這兩種方式。許多PHP框架還提供了簡單的資料庫整合。
使用資料庫可用於搜尋、排序和過濾資訊以呈現給使用者,例如線上商店中的產品。
從歷史上看,JavaScript不與資料庫整合,儘管這種情況已經開始發生變化。
PouchDB是JavaScript資料庫的一個例子。
PouchDB開源JavaScript資料庫
執行緒
執行緒是指程式語言可以處理的指令。
PHP是多執行緒的,這意味著它可以並行處理多條指令。
相反是一種單執行緒語言,如JavaScript,一次只能處理一個命令。
為了說明執行緒,開發人員Samim Yaquby使用了為客戶服務的咖啡店的類比。
對於只有一名咖啡師的小咖啡館,咖啡師可以更輕鬆、更高效地為顧客提供更簡單的訂單,一次一個。這類似於JavaScript的單執行緒。
相比之下,一家大型星巴克很可能有幾個咖啡師同時完成相同的訂單。這與PHP的多執行緒方法相呼應。
速度
一般來說,在相同的硬體上,JavaScript的執行速度比PHP快。但是,由於JavaScript在客戶端上執行,如果客戶端機器舊且執行緩慢,則會對執行時間產生連鎖反應。
自PHP 7釋出以來,PHP速度得到了突飛猛進的提升,這要歸功於新引擎,效能翻倍並改善了記憶體消耗。與PHP 5.6相比,PHP 7.0可以處理兩倍以上的請求,並且隨著每個7.x版本的釋出,效能進一步提高。
當您構建聊天機器人或遊戲等實時應用程式時,PHP也比JavaScript執行得更好。
帶有Just in Time Compiler的PHP 8的釋出有望使PHP更快。
包管理器
每種語言都有自己的包管理器來管理包:為專案新增額外功能的第三方可重用程式碼模組。一些包依賴於其他包執行,因此它們被稱為依賴項。
PHP有兩個包管理器,PEAR和Composer,它們可以在Packagist儲存庫中下載PHP包。
JavaScript有幾個著名的包管理器,包括npm、Yarn和Bower。
JavaScript包管理器
其中,npm最受歡迎,全球有超過1100萬開發人員在使用它。
網路使用
PHP是當今網路上最常用的伺服器端語言,在近80%的網站使用它的情況下輕鬆擊敗了它的競爭對手。
W3Techs伺服器端程式語言
雖然PHP非常流行,但JavaScript在網站上幾乎無處不在,97%的網站都在使用它。
W3Techs客戶端程式語言
PHP用於什麼?
PHP具有廣泛的用途。
它可能以建立動態網頁而聞名。根據BuiltWith的說法,PHP被超過3400萬個網站使用,它為網路上一些最著名和收入最高的網站提供支援,包括Nike、Salesforce和Walmart。
如果您的專案需要使用者的安全身份驗證,PHP是一個完美的選擇。這包括cookie和會話處理、使用者名稱和密碼身份驗證以及兩因子身份驗證。
如前所述,PHP非常適合處理資料庫,因為它可以與範圍廣泛的資料庫互動。它還具有用於處理使用者輸入的內建資料安全性,以防範SQL隱碼攻擊等威脅。
PHP還常用於構建即時訊息等實時應用程式。
最後,即使您在前端完成大部分工作,您也需要一個伺服器後端。PHP 是一個理想的選擇,因為它就是為此而建立的。
JavaScript用於什麼?
JavaScript變得如此流行,以至於可能正確的問題是“ JavaScript不用於什麼?”
除了網站和Web應用程式之外,JavaScript還用於構建以下所有內容:
- 移動應用
- 網路伺服器
- 遊戲
- 幻燈片
- 聊天機器人
- ……甚至可程式設計無人機
Super Chrono Portal Maker,一個HTML5和JavaScript遊戲
JavaScript可以與PHP一起使用嗎?
答案是肯定的,絕對的。
一個常見的例子是Web表單,在將使用者輸入儲存到資料庫之前驗證使用者輸入很有用。
您可以使用JavaScript進行客戶端驗證,例如檢查電子郵件的格式是否正確。之後,您可以使用PHP進行伺服器端驗證,例如檢查電子郵件是否存在於您的資料庫中。
WordPress如何使用JavaScript和PHP
傳統上,WordPress使用了這兩種語言,但PHP比JavaScript多得多。隨著Gutenberg編輯器的推出,這種情況開始發生變化。
在2015年在美國WordCamp上Matt Mullenweg的State of the Word中,他通過敦促觀眾瞭解JavaScript將變得多麼重要
“深入學習JavaScript。”
就目前情況而言,以下是兩種語言在WordPress中的使用方式。
PHP用於主題模板檔案、迴圈、身份驗證、驗證和資料庫訪問。
JavaScript為主題和外掛互動性、客戶端驗證和事件處理提供支援。最值得注意的是,區塊開發需要一些JavaScript知識,因為塊依賴於React JS 框架。
學習PHP與JavaScript
因為它們相當容易學習,所以您沒有理由不能同時學習PHP和JavaScript。
這兩種語言依賴於某些程式設計基礎,例如變數、迴圈、條件語句、作用域和物件。
因為它是如此成熟和流行的語言,所以很容易學習PHP。
由於PHP是一種伺服器端語言,您需要一個伺服器來編寫程式碼。那可能是一個真正的 Web 伺服器,也可能是一個模擬伺服器,例如本地開發環境。一些示例是XAMPP、WAMP或MAMP。
通過在瀏覽器控制檯中練習,您可以輕鬆地開始學習JavaScript。
在Chrome瀏覽器上,您可以通過Windows上的 Control+Shift+J 快捷方式或Mac上的 Command+Option+J 來訪問控制檯。
Chrome的JavaScript控制檯中的一個簡單的Hello World程式
JavaScript變得更難掌握的地方在於其生態系統的龐大規模。
JavaScript語言已經從普通的JavaScript擴充套件到了大量的框架。Angular、Vue、jQuery和React只是現在存在的眾多工具中的一部分。
一些JavaScript框架
對於初學者來說,一個很好的資源來自他們JavaScript文件中的MDN Web Docs 。
克里斯·費迪南迪 (Chris Ferdinandi) 以教授普通 JavaScript 的人而聞名,他說JavaScript只有在他學習了jQuery之後才真正吸引了他。
他對JS新手的建議是:
“不要糾結於學習的順序。不要浪費時間去挑選完美的東西,因為沒有完美的東西。”
在不瞭解HTML和CSS的基礎知識的情況下,只需注意JavaScript框架的閃亮物件綜合症。HTML是Web上一切事物的基礎,如果過於熱心的JavaScript開發人員對其處理不當,它可能會真正崩潰。
PHP與JavaScript-比較表
PHP | JavaScript |
伺服器端指令碼 | 客戶端指令碼 |
後臺使用 | 在前端使用(現在使用Node.js全棧) |
僅與HTML結合 | 結合多種語言 |
部分割槽分大小寫 | 完全區分大小寫 |
語法差異,例如#允許註釋 | 語法差異,例如#不允許註釋 |
用$字首宣告的變數 | 用var或let關鍵字宣告的變數 |
有關聯陣列 | 沒有關聯陣列 |
與許多資料庫整合 | 資料庫支援不佳或不存在 |
多執行緒 | 單執行緒 |
PHP 7.0或以上版本快 | 通常比PHP快 |
使用PEAR和Composer包管理器 | 使用npm、Yarn和Bower包管理器 |
如果PHP版本>7.x執行速度快 | 一般比PHP快 |
在大約80%的網站上使用 | 在幾乎所有網站上使用 |
小結
在深入探討PHP與JavaScript的過程中,沒有真正的贏家。他們都有自己的優點和缺點。
PHP穩定可靠,而JavaScript已成為該領域的酷孩子。但這並不意味著一個比另一個更好。
無論您為下一個專案選擇哪個 – 可能兩者兼而有之!— 如果您花時間瞭解該語言,您可以確定您將構建一個讓使用者滿意的網站或應用程式。
評論留言