[閒聊] 新手學 PHP 不要從 Laravel 開始
這是前天晚上在 LaravelConf 跟人聊到的,不熟寫程式的人應該怎麼學 PHP 網站開發
重新整理一下貼上來
這年頭的高大上 PHP 網站開發其實要掌握的技能相當多
- 會用 composer
- 搞懂 MVC
- 搞懂 autoloading,或至少知道 autoloading
- 有能力寫物件導向程式
- 要會資料庫
- 要會 html/css/js[B
- 要搞定 web server
- 最重要的,會寫 PHP
這些項目每一個對於白紙等級的新手來說都是一堵高牆
尤其是,整份 PHP 現代工程都是疊在 OOP 上面,這並不是大部分新手三個月就能掌握的東西
如果直接叫白紙新手從 Laravel framework 開始,那等於是把小學生丟去打天下第一武道會
就算形式學起來了,那也只是不明就裡
從這個角度來說,我認為那些古代 PHP 寫法可能更適合純粹新手上手
在學習 OOP 之前,先讓他學會
<h1>你好,<?=$_GET['name']?></h1>
從這邊開始,漸漸長出一堆麵條一般交疊的 html 跟 php 之後
再讓他看到邏輯跟 html 可以分開
<?php
$name = isset($_GET['name']) ? $_GET['name'] : "無名氏";
// 三百行邏輯
?>
<h1>你好,<?=$name?></h1>
<!-- 三百行 html -->
這樣新手不但能看懂你教了什麼,又能在一瞬間理解「邏輯跟呈現分開很重要」
等到這種等級熟悉了,然後可以開始專心教 namespace/autoloading/class 這些東西
或是帶入 template engine
更甚至, PHP 在 cli 上面也是充分好用的工具
撇開網頁不管,PHP 就是個 scripting language
所以我在想,甚至根本可以(甚至是應該)把「網頁」跟「PHP」分開來教
印星星也好,印聖誕樹也好,掌握寫程式跟掌握網站開發那一大包根本可以分開處理。
沒有必要綁架起來放在一起。
人家怎麼學 python,就教新手怎麼學 PHP
這年頭一堆人推崇 python 寫工具管系統做爬蟲,但是有什麼是 python 能做 PHP 卻不能做的嗎?
沒有,我照樣可以用 PHP 爬 Log 寫 git hook 甚至寫爬蟲抓檔案
新版 PHP 的效能還比 python 好(雖然這通常不重要,通常)
而且比起 python,PHP 有個壓倒性的好處
PHP 有大括號
--
不可以!那是黑鷹族的精神象徵!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.248.122.205
※ 文章網址: https://www.ptt.cc/bbs/PHP/M.1499060668.A.A32.html
→
07/03 14:15, , 1F
07/03 14:15, 1F
→
07/03 14:54, , 2F
07/03 14:54, 2F
推
07/03 15:58, , 3F
07/03 15:58, 3F
推
07/03 16:17, , 4F
07/03 16:17, 4F
→
07/03 16:17, , 5F
07/03 16:17, 5F
→
07/03 16:36, , 6F
07/03 16:36, 6F
推
07/03 16:52, , 7F
07/03 16:52, 7F
→
07/03 16:52, , 8F
07/03 16:52, 8F
→
07/03 17:56, , 9F
07/03 17:56, 9F
推
07/03 20:48, , 10F
07/03 20:48, 10F
推
07/03 21:20, , 11F
07/03 21:20, 11F
→
07/04 11:01, , 12F
07/04 11:01, 12F
我來寫好了,我很愛 PHP ,但我清楚明白接受 PHP 有很多缺陷
- array 系列 function 不查文件永遠不知道誰該在前面誰該在後面。
- 對於多 byte 字串的支援要另外處理
(不能用str*要用mb*,非英文使用者表示靠北)
- 一般來說依照 namespace 自動載入檔案是語言特性,Java 如此 python 如此
只有 PHP 還得自己寫。大家用 composer 有很大一部分是因為不用自己寫
符合規範的 autoloader...
- 自動轉型就是會給你驚喜(這點 js 也差不多)
而且有時候不需要用到兩個等號,而是放進 function 參數就會出事
- PHP 對於 namespace 下的 function 沒有好的自動載入方案
- 非同步/多 Process 寫起來是一屁股痛,fork是相當原始粗暴的做法
自幹 fork 沒寫出 fork bomb 把系統弄爛者,幾稀矣。
- PHP 自己就是個 template engine [by Rasmus],但是為了讓 code 乾淨好讀
你通常會想引入寫在 template engine 裡面的 template engine,簡直是夢中夢...
- 上面有幾點很可能為了相容性而永遠不會修掉。
好吧我對 PHP 的愛可能有點太多,寫不到五百字...
但就算問題這麼多,他能做的事情並不比 python 與 ruby 少
有好好規劃的話 code 也不會難看到哪裡。
大家還在用 python 說穿了就是因為 Google 喜歡 python 的人很多...
光 Tensorflow 就不知道增加了多少 python 使用者
PHP 因為 Facebook 力挺(雖然不知道還有幾年),所以也還不會太糟
Ruby 後面沒有大公司撐腰,只能凋零了。
另,雖然我常常靠北 Python,但我其實也不覺得 python 比 PHP 差(當然的)
我只是覺得 PHP 有了 composer 跟 phar 之後這明明可以跟 python 平起平坐...
→
07/04 11:02, , 13F
07/04 11:02, 13F
→
07/04 11:22, , 14F
07/04 11:22, 14F
我覺得光是 namespace 跟 class 的概念就不適合當新手村任務了。
其實看板上的文章有時候也會這種感覺。明顯看起來就是不太會寫程式的新人
拿著(有點老的)書上的範例來問,然後換來「千萬不要這樣寫」的回答
作為工作,我舉雙手贊同。
但是作為學習,我總覺得那些「應該這樣寫」的東西新人吃得下去也是很厲害
推
07/04 11:58, , 15F
07/04 11:58, 15F
推
07/04 12:20, , 16F
07/04 12:20, 16F
→
07/04 12:20, , 17F
07/04 12:20, 17F
推
07/04 13:47, , 18F
07/04 13:47, 18F
→
07/04 13:48, , 19F
07/04 13:48, 19F
我覺得要挑出不好的地方很容易
更何況 Personal Home Page 工具包(笑)一開始根本不是個語言
但有就算很多缺點,他還是可以做出 Facebook、KKBOX、或 Gameboy 模擬器。
很多缺點跟他不好用根本是兩個獨立命題
→
07/04 13:49, , 20F
07/04 13:49, 20F
→
07/04 13:49, , 21F
07/04 13:49, 21F
騎腳踏車也不難,但是在我會騎腳踏車以前那對我難到靠北邊
我覺得一樣的意思
→
07/04 13:49, , 22F
07/04 13:49, 22F
→
07/04 13:50, , 23F
07/04 13:50, 23F
我覺得不是「不要寫 Class」
這年頭不分 class 不用 namespace 不太容易寫出能維護的 code
不是做不到,但能做到的不多而且一定是老手
但是 class / namespace 這是否是好的新手村任務,我懷疑。
我認為這至少是新手村畢業任務甚至是一轉任務之類的...
※ 編輯: GALINE (60.248.122.205), 07/04/2017 13:55:56
→
07/04 13:56, , 24F
07/04 13:56, 24F
→
07/04 13:57, , 25F
07/04 13:57, 25F
→
07/04 13:57, , 26F
07/04 13:57, 26F
→
07/04 13:57, , 27F
07/04 13:57, 27F
→
07/04 13:57, , 28F
07/04 13:57, 28F
→
07/04 13:57, , 29F
07/04 13:57, 29F
→
07/04 13:57, , 30F
07/04 13:57, 30F
我用作者特權整理一下推文順序
推
07/04 13:58, , 31F
07/04 13:58, 31F
→
07/04 13:58, , 32F
07/04 13:58, 32F
→
07/04 13:59, , 33F
07/04 13:59, 33F
→
07/04 14:00, , 34F
07/04 14:00, 34F
推
07/04 14:00, , 35F
07/04 14:00, 35F
※ 編輯: GALINE (60.248.122.205), 07/04/2017 14:02:44
→
07/04 14:03, , 36F
07/04 14:03, 36F
→
07/04 14:04, , 37F
07/04 14:04, 37F
→
07/04 14:05, , 38F
07/04 14:05, 38F
推
07/04 14:05, , 39F
07/04 14:05, 39F
→
07/04 14:05, , 40F
07/04 14:05, 40F
→
07/04 14:06, , 41F
07/04 14:06, 41F
→
07/04 14:06, , 42F
07/04 14:06, 42F
推
07/04 14:08, , 43F
07/04 14:08, 43F
→
07/04 14:09, , 44F
07/04 14:09, 44F
→
07/04 14:09, , 45F
07/04 14:09, 45F
推
07/04 14:16, , 46F
07/04 14:16, 46F
→
07/04 14:16, , 47F
07/04 14:16, 47F
→
07/04 14:17, , 48F
07/04 14:17, 48F
→
07/04 14:18, , 49F
07/04 14:18, 49F
→
07/04 14:18, , 50F
07/04 14:18, 50F
→
07/04 14:22, , 51F
07/04 14:22, 51F
→
07/04 14:23, , 52F
07/04 14:23, 52F
推
07/04 15:06, , 53F
07/04 15:06, 53F
→
07/04 15:07, , 54F
07/04 15:07, 54F
→
07/04 17:19, , 55F
07/04 17:19, 55F
推
07/04 19:52, , 56F
07/04 19:52, 56F
推
07/05 10:09, , 57F
07/05 10:09, 57F
推
07/15 23:13, , 58F
07/15 23:13, 58F
推
08/29 10:09, , 59F
08/29 10:09, 59F
→
08/29 19:20, , 60F
08/29 19:20, 60F
→
08/29 19:20, , 61F
08/29 19:20, 61F
推
10/26 18:39, , 62F
10/26 18:39, 62F
→
10/26 18:39, , 63F
10/26 18:39, 63F
推
12/19 13:20, , 64F
12/19 13:20, 64F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 3 篇):
PHP 近期熱門文章
PTT數位生活區 即時熱門文章