# 第二程式語言習得?從JavaScript經驗學習PHP語法類比為例 ###### tags: `JavaScript` `PHP` `Express.js` `Laravel` `語法` ## JavaScript(with Express) VS PHP(with Laravel) - 二者生態環境風格比較心得:輕量、多元、設定 VS 整合、單純、慣例? - 由於筆者是先學Javascript(JS),會偏向從以熟悉的JS邏輯「轉譯」成PHP的 - 推薦PHP入門中文書目([皆可在Hyread One圖書館線上借閱](https://one.ebook.hyread.com.tw/index.jsp)): - 語法方面由於語言及框架不斷更新,請以網路上的新版文件為準,書籍主要是輔助理解 1. [漫話PHP:史上最易懂的PHP手冊](https://one.ebook.hyread.com.tw/bookDetail.jsp?id=120374) - 雖然是2017年的舊書但較易閱讀,且能複習開發基本流程與理解傳統無框架方案 2. [PHP動態網站系統開發與Laravel框架運用](https://one.ebook.hyread.com.tw/bookDetail.jsp?id=226970) - 從初學者角度介紹PHP與Laravel,PHP部分篇幅較多,內容相對詳盡易懂 3. [使用Laravel 8 PHP主流框架打造RESTful API](https://one.ebook.hyread.com.tw/bookDetail.jsp?id=237881) - 定位同上,但相對簡潔留白,集中在Laravel部分,內容改編自[鐵人賽文章系列](https://ithelp.ithome.com.tw/users/20105865/ironman/2466) ## 語法類比說明: - 類似文章(有討論細部語法比較的,不只是特色列舉): - [PHP Vs Javascript: The Right Tech For Your Next Big Project](https://www.clariontech.com/blog/php-vs-javascript-the-right-option-for-your-next-big-project) - [PHP vs JavaScript: An In-Depth Comparison of the Two Scripting Languages](https://kinsta.com/blog/php-vs-javascript/) - [Learning JavaScript from PHP - a Comparison](https://www.lullabot.com/articles/learning-javascript-from-php-a-comparison) - [PHP 轉 Node 筆記(一. 談談兩者的差異)](https://iter01.com/62824.html) - [PHP 轉 Node 筆記(二. 基礎的Web開發)](https://iter01.com/354910.html) - [PHP Javascript 語法對照](https://learnku.com/articles/48467?order_by=vote_count&) - [寫給JavaScript開發人員的PHP快速入門指南](https://developer.51cto.com/article/616226.html) - 重點說在前頭:其實更多的是相似而非差異 - 邏輯甚至語法的通用,如運算符號、流程控制、條件迴圈、錯誤處理(try/catch)、註解寫法(//、/**/)、函式(function)、return、class...... - 先應用已經習得的概念,去找尋新學習程式語言/工具/函式庫/框架......等的對應寫法(人腦編譯的概念?) ## JS與PHP的寫法對照範例: - 基本語法 - 語言格式: JS vs PHP - 分號(;): 選加(可自動補上) vs 必加(否則會錯誤) - 命名規則: camel case(全部) vs snake case(部分) - 變數宣告: var/let vs $(改值也要加,取全域變數以$GLOBALS引入,另有靜態static/動態$$變數) - 常數拼寫(const): 小寫 vs 大寫(另有define語法) - 字串連接: + "" vs ."" - 內部調用: . vs ::/-> - 內建函式 - 訊息輸出: console.log() vs echo(較快,無回傳值)/print(後面可選加括號)/print_r(陣列)error_log(僅終端機訊息); - 變數屬性: typeof & .length vs var_dump() - 小數點調整: .toFixed() vs round(,) - 取整數值: parstInt() vs intval() - 建立陣列: (new) Array() vs array() - 操作陣列: .push()/.pop() vs array_push()/array_pop() - 鍵-值格式的物件/關聯(索引)陣列: {key: value} vs [key => values]/new stdClass()/json_encode() - 回傳JSON: JSON.stringify(與Object格式87趴像,有時不用特別互轉) vs json_encode() - 介面(interface):TypeScript才有(檢查型別) / PHP內建(較類似能同時繼承的class) - 與HTML、後端框架等其他檔案使用的寫法 - 標籤註記: <script>(.html內,前端運算)/(.js內不須標籤,html以字串形式操作)/<%(EJS,後端模板) vs <?php(不能省略否則無法運作)/<?(設定可用簡寫) - URL參數: :id vs {id} - 引入目錄的其他檔案:require(CommonJS)/import(ES6)+變數 vs require(/_once避免重複引入,缺少跳錯誤停止)/include(/_once避免重複引入,缺少跳警告仍可用作)/use(namespace,算虛擬目錄,原生JS無此概念)+as - 取得URL query string(GET)的值:URLSearchParams(window.location.search)(前端)/req.query(後端) vs $_GET(PHP) / $request->query(Laravel) - 取得POST的值:Request.body(前端)/req.body(後端) vs $_POST(PHP) / $request(Laravel) - 呼叫API:fetch() vs curl_setopt() - cookie/session設定:第三方套件 vs 原生語法(setcookie/$_SESSION) - 讀取檔案:前端透過HTML(<input type='file' />)/後端引入node.js內建模組(fs.readFile) vs 原生變數語法(file())/框架內driver - 讀取資料庫:前端不建議(安全問題)/後端第三方套件 vs 原生變數語法(mysql_connect())/框架內driver - 補充:安裝方式與常用套件 - 安裝模式:node.js選裝其他軟體 vs AMP組合安裝(MAMP-Mac或Windows推薦, phpMyAdmin-Linux環境推薦) - 搭配伺服器軟體:內建 vs Apache/Nginx - 版本管理:nvm vs PHPBrew - 使用[MAMP](https://progressbar.tw/posts/28)建立開發環境的話,可以從設定更改使用的PHP版本,也可以從PHP官網抓新版替換,並修改環境變數相關的安裝位置 - 套件管理:npm vs composer - 主流框架:Express(輕量,只包含基本套件) vs Laravel(全功能學Rails黑魔法……) - 啟動指令:npm run start vs php artisan serve - 模板引擎:Handlebars/EJS/… vs Blade/Native PHP/… - 知名ORM: Sequelize vs Eloquent(Artisan命令) - Generator:express generator vs laravel (global) - 常見測試:Mocha/Jest vs PHPUnit(Artisan命令) - Coding Style:Standard/Airbnb/Google/… vs PSR
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up