寫給JavaScript開發(fā)人員的PHP快速入門指南
我從2012年開始學(xué)習(xí)如何使用HTML和CSS進(jìn)行編碼,自從我的編碼之旅開始以來,PHP一直是我一直想學(xué)習(xí)的語言之一。

作為一個(gè)剛從JavaScript培訓(xùn)學(xué)校畢業(yè)的學(xué)生,我決定要重新嘗試學(xué)習(xí)PHP。一直以來,要想找到一些關(guān)于 PHP 的資源,而不是針對(duì)那些從未接觸過代碼的人,是相當(dāng)困難的。所以,這也是我寫這篇文章的原因。我希望能夠幫助其他像我這樣的人,他們只是需要一個(gè)快速的指導(dǎo),讓他們了解自己選擇的語言和他們想學(xué)的語言之間的區(qū)別。
一般語法
PHP 的語法和 JavaScript 的比較大的區(qū)別之一是,PHP 的語法中,需要在行的末尾加上分號(hào)。我一開始很糾結(jié)于這個(gè)問題,現(xiàn)在有時(shí)也會(huì)這樣,所以我想在這里首先說明一下。
使用語言
在JavaScript中,除了確保文件具有 .js 擴(kuò)展名之外,無需執(zhí)行任何特殊操作即可運(yùn)行代碼。但是,在PHP中,即使在擴(kuò)展名為 .php 的文件中,也需要使用標(biāo)簽。
- <?php
- # code here
- ?>
聲明變量
在PHP中創(chuàng)建變量非常簡單。與JavaScript一樣,PHP是一種動(dòng)態(tài)類型化的語言,因此不必在創(chuàng)建變量時(shí)聲明變量的類型。它使用 $ 符號(hào)表示變量。
- $myvar = 'value';
在PHP中,默認(rèn)情況下你聲明的任何變量都是可變的,絕對(duì)可以在任何地方進(jìn)行更改。
聲明常量
PHP有一個(gè)稱為 define 的特殊功能,用于專門創(chuàng)建無法更改的變量。它帶有兩個(gè)參數(shù):變量的名稱和要分配給它的值。默認(rèn)情況下,此函數(shù)將你創(chuàng)建的變量名稱設(shè)置為區(qū)分大小寫??梢酝ㄟ^將 true 作為第三個(gè)參數(shù)傳遞給函數(shù)來覆蓋它。
- define('CONSTANT_NAME', value, true);
聲明數(shù)組
很像JavaScript的數(shù)組可以用標(biāo)準(zhǔn)的括號(hào)符號(hào)或PHP中的一個(gè)函數(shù)來創(chuàng)建。也就是說,PHP的關(guān)聯(lián)數(shù)組相當(dāng)于一個(gè)JavaScript對(duì)象,是在PHP中創(chuàng)建key/value對(duì)集合的唯一方法,而不需要導(dǎo)入某種模塊。在PHP中給鍵賦值是用 => 表示的。
- $myArray = ['key1' => 'value', 'key2' => 'value', 'key3' => 'value'];
函數(shù)
PHP中的函數(shù)與JavaScript(特別是ES5)非常相似。
- function myFunc($param) {
- return $param;
- }
這方面,我能在兩種語言之間找到的唯一真正的區(qū)別是,PHP具有一個(gè)運(yùn)算符,可將你傳入的參數(shù)從基于值更改為引用:&。
- $myVar = 10;
- echo $myVar; # displays 10
- function addTen(&$param) {
- return $param += 10;
- }
- addTen($myVar);
- echo $myVar; # displays 20
循環(huán)
就像函數(shù)一樣,循環(huán)與用JavaScript編寫的方式?jīng)]有太大不同。一個(gè)例外是PHP的 foreach 循環(huán),它會(huì)根據(jù)你嘗試循環(huán)的數(shù)組類型而變化。
- foreach($arrayName as $item) {
- # do code
- }
類和OOP方法論
類是PHP與JavaScript有很大不同的地方。盡管PHP最初不是作為一種面向?qū)ο蟮木幊陶Z言(類似于JavaScript),但后來又添加了該功能。
訪問修飾符關(guān)鍵字
在標(biāo)準(zhǔn)JS中,類不需要修飾詞。但是,對(duì)于PHP,它們是。
你在PHP中擁有的修飾符是:
- public——可以通過腳本或其他類在類外部使用它。
- private——創(chuàng)建此類的類是唯一可以訪問它的類。
- protected ——只有當(dāng)它在類的子類中被調(diào)用時(shí),才可以在類外訪問。
- static ——允許使用一個(gè)屬性或方法,而不需要對(duì)該屬性或方法所屬的類進(jìn)行實(shí)例化。
在PHP中創(chuàng)建類時(shí),比較好的做法是利用這些關(guān)鍵字來告訴類它需要如何使用類中的屬性和方法。
- class MyClass {
- private $classAttrib;
- public function __construct($classAttrib) {
- this->classAttrib = $classAttrib;
- }
- }
在上面的代碼片段中,你會(huì)注意到幾件事。首先可能是兩個(gè)修飾關(guān)鍵字。在這里,我們聲明了一個(gè)名為 classAttrib 的私有變量,這個(gè)變量只能通過 MyClass 訪問。第二個(gè)是我們與PHP的內(nèi)置 __construct 方法結(jié)合使用的 public 關(guān)鍵字。就像在JavaScript中一樣,這使我們可以實(shí)例化一個(gè)類,就好像它是一個(gè)函數(shù)一樣。
- $myClass = new MyClass(someValue);
this和箭頭
繼續(xù)上面的 MyClass 示例,你會(huì)注意到我們以與JavaScript中相同的方式來使用它。此處的區(qū)別在于,我們使用箭頭(->)訪問該類上的 classAttrib。我們還將使用這個(gè)指針來訪問類上的任何需要在整個(gè)代碼中使用的東西。
這是JavaScript中的同一類:
- class MyClass {
- constructor(classAttrib) {
- this.classAttrib = classAttrib;
- }
- }
Getters 和 Setters
Getter和Setter是用于獲取和設(shè)置(或更新)與類屬性有關(guān)的信息的類方法。在JavaScript中,我們通常不需要編寫它們,類似地,在PHP中也不需要。話雖如此,但在PHP中你會(huì)看到這些方法的頻率要高得多,所以我覺得在這里還是慎重一點(diǎn)?;旧?,這些方法是唯一應(yīng)該在類外直接修改或與類屬性交互的東西。
- # ... inside MyClass
- public function setClassAttrib($classAttrib) {
- return $this->classAttrib = $classAttrib;
- }
- public function getClassAttrib() {
- return $this->classAttrib;
- }
繼承
從PHP中的父類繼承類似于JavaScript,不同之處在于我們不使用 super 來傳遞父類的屬性。相反,我們使用 :: 運(yùn)算符,也稱為范圍解析運(yùn)算符。
- class SecondClass extends MyClass {
- private $newAttrib;
- public function __construct($classAttrib, $newAttrib) {
- parent::__construct($classAttrib);
- this->newAttrib = $newAttrib;
- }
- }
PHP和JavaScript的相似之處
既然我們已經(jīng)討論了JavaScript和PHP之間的一些差異,那么讓我們來談?wù)勔恍┫嗨浦?
- PHP有展開(...)語法!你可以使用與JavaScript中完全相同的語法,在參數(shù)(參數(shù)解包在PHP 5.6以上)和數(shù)組(從PHP 7.4以上開始)中都可以使用!
- PHP有三元運(yùn)算符!
- PHP具有 == 的強(qiáng)制類型轉(zhuǎn)換!
如前所述,我還是PHP的新手,但希望本文對(duì)你有所幫助!