---
# System prepended metadata

title: 第二程式語言習得？從JavaScript經驗學習PHP語法類比為例
tags: [語法, JavaScript, Express.js, PHP, Laravel]

---

# 第二程式語言習得？從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

