# 學生交付 Markdown 學習心得:
內部訓練實施期間,要求學生交付 Markdown 學習心得,並鼓勵學生經營自己的 Blog/Github。
## HTML
- HTML5 是什麼
- HTML5 有什麼新特色
- 認識 HTML 標籤
- 常用的必學:
- 標題 h1 ~ h6
- 表單: form、input、select、radio、checkbox、button
- 資料表: table、thead、tbody、tr、td
- 區塊: div
- 列表: lu、li
- 認識 HTML 事件(DOM Events)
- 列出 HTML 有些事件即可,深入使用要透過 JavaScript
- 如何引入 JavaScript
- 如何引入 CSS
- 跟 xHTML 差在哪?
- 學習資源
- [HTML W3Cschool](http://www.w3school.com.cn/html/html_basic.asp)
## CSS
- CSS 是什麼
- CSS 基礎語法
- 什麼是選擇器(Selector),有哪些選擇器
- 有幾種套用 CSS 的方式、如何套用?
- 樣式的部分可快速看過,但以下必學
- 盒子模型(排版用): padding、margin
- 學習資源
- [CSS 菜鳥教學](http://www.runoob.com/css/css-syntax.html)
- [CSS W3Cschool](http://www.w3school.com.cn/css/css_syntax.asp)
## Bootstrap
- 什麼是 Bootstrap
- 必學常用功能
- Grid 網格(幾乎都用這個做排版)
- 學習資源
- 推薦學法:快速讀過下面兩個網站的教學,就可以掌握 Bootstrap 大概有哪些功能,實作時再回來反查即可。
- [Bootstrap3 W3Cschool](https://www.w3schools.com/bootstrap/)
- [Bootstrap3 菜鳥教學](http://www.runoob.com/bootstrap/bootstrap-tutorial.html)
## JavaScript
- 基礎語法
- 操作 DOM: 動態新增、修改、刪除 HTML
- 操作 DOM 事件(DOM Event): 監聽 HTML 的狀態,如是否被點擊、被拖曳、被滑鼠經過、被送出表單等等
- 學習資源:
- [JavaScript 菜鳥教學](http://www.runoob.com/jsref/jsref-tutorial.html)
- [JavaScript W3Cschool](https://www.w3cschool.cn/javascript/js-tutorial.html)
## jQuery:
JavaScript 的函式庫,簡化 DOM、AJAX 與 DOM Event 操作的 JavaScript 函式庫
- 簡介 jQuery
- 選擇器(Selector)
- 遍歷(另一種取得 HTML 標籤的方式)
- parent
- parents
- find
- siblings
- 常用功能
- DOM 事件
- 操作 HTML:
- 動態添加 HTML: append、prepend、after、before
- 複製 HTML: copy
- 操作 CSS
- addClass
- removeClass
- toggleClass
- hasClass
- [ajax](http://www.runoob.com/jquery/ajax-ajax.html) 非同步 HTTP 請求
- 簡介 ajax,特性、優點、使用場景
- 如何利用 ajax 傳遞參數給後端
- 後端處理成功後,ajax 如何接收後端的回覆(Response)
- 學習資源:
- [jQuery 菜鳥教學](http://www.w3school.com.cn/jquery/index.asp)
- [jQuery 官方](https://api.jquery.com/)
## PHP
- 安裝 XAMPP Apache + MariaDB + PHP + Perl
- 登入的頁面練習
- 利用 phpMyAdmin 建立一個 DB Schema: ants\_training 與 user 資料表。
- 前端 login.html 製作登入用的 Form 表單
- 後端 login.php 處理登入邏輯
- 用 $\_POST 取得使用者的帳號與密碼
- 連線資料庫(Database):關鍵字 PHP 連線 MySQL
- 利用使用者的帳號、密碼,到資料庫裡面查詢該名使用者是否存在
- 若存在的話顯示登入成功
- 不存在,顯示登入失敗
```mermaid
graph TD
DB:ants_training --> 包含user資料表
login.html -- 建立Form並使用POST傳送帳號,密碼 --> login.php
login.php --> 用POST取得使用者的帳號與密碼
用POST取得使用者的帳號與密碼 --> 連線資料庫DB:ants_training
連線資料庫DB:ants_training --> 利用使用者的帳號與密碼,到資料庫裡面查詢該名使用者是否存在
利用使用者的帳號與密碼,到資料庫裡面查詢該名使用者是否存在 -- 若存在 --> 顯示登入成功
利用使用者的帳號與密碼,到資料庫裡面查詢該名使用者是否存在 -- 若不存在 --> 顯示登入失敗
```
## OOP 基礎,包含介面、多型
- 什麼是物件導向
- 什麼是類別(class),一個類別包含哪些東西
- 什麼是物件(object)
- 類別跟物件的差別
- 可視性: public、protected、private 定義、差別與使用場景
- $this 是什麼,什麼時候使用 $this
- 介面的定義
- 抽象類別的定義
- 多型的定義
## OOP SOLID 原則
- 單一職責原則 Single responsibility principle
- 開放封閉原則 Open/Close Principle
- 裡氏替換原則 Liskov Substitution Principle
- 介面隔離原則 Interface Segregation Principle(
- 依賴反轉原則 Dependency Inversion Principle
- 了解依賴是什麼
- 了解高階、低階程式的定義跟差異
- 什麼是依賴注入
- 最少知識原則 Principle of Least Knowledge
- 又稱 迪米特原則 Law of Demeter
## Bonus:
1. PHP Pear、Composer 的差異
2. PHP PSR-1、2、4 (不要求 PSR-0 但要讀過)