[閒聊] 新手學 PHP 不要從 Laravel 開始

看板PHP作者 (天真可愛CQD)時間7年前 (2017/07/03 13:44), 7年前編輯推噓20(20044)
留言64則, 20人參與, 最新討論串1/3 (看更多)
這是前天晚上在 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
PHP語言本身就一堆問題, 愈修愈爛而已
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
Laravel本來就是PHP有一定程度才會開始學的吧
07/03 16:17, 5F

07/03 16:36, , 6F
不只是Laravel吧, framework都是, 剛開始還是native吧
07/03 16:36, 6F

07/03 16:52, , 7F
php有一件一定要用extension才能做的事情,異步處理
07/03 16:52, 7F

07/03 16:52, , 8F
07/03 16:52, 8F

07/03 17:56, , 9F
其實不是不行,php可以fork...但確實很難用.........
07/03 17:56, 9F

07/03 20:48, , 10F
我覺得php的好處就是網頁很便利阿, python網頁都MVC...
07/03 20:48, 10F

07/03 21:20, , 11F
看得懂簽名檔應該有一定年紀了 你好我是坐你對面的泳褲XD
07/03 21:20, 11F

07/04 11:01, , 12F
一樓寫一下一堆是哪一堆 至少要寫500字 謝謝
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
Laravel的確複雜到不適合當教學工具
07/04 11:02, 13F

07/04 11:22, , 14F
適合production用的東東不一定適合教學
07/04 11:22, 14F
我覺得光是 namespace 跟 class 的概念就不適合當新手村任務了。 其實看板上的文章有時候也會這種感覺。明顯看起來就是不太會寫程式的新人 拿著(有點老的)書上的範例來問,然後換來「千萬不要這樣寫」的回答 作為工作,我舉雙手贊同。 但是作為學習,我總覺得那些「應該這樣寫」的東西新人吃得下去也是很厲害

07/04 11:58, , 15F
FB: 我們用爛語言,也能稱霸那麼久 XD
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
其實PHP在這幾年有相當大的變革,從語法到VM本身
07/04 13:47, 18F

07/04 13:48, , 19F
如果真的要說爛,應該沒有人會說 JS 是個好語言。
07/04 13:48, 19F
我覺得要挑出不好的地方很容易 更何況 Personal Home Page 工具包(笑)一開始根本不是個語言 但有就算很多缺點,他還是可以做出 Facebook、KKBOX、或 Gameboy 模擬器。 很多缺點跟他不好用根本是兩個獨立命題

07/04 13:49, , 20F
其實namespace和class並沒有那麼難懂……
07/04 13:49, 20F

07/04 13:49, , 21F
但我比較常看到不懂的人說他難……
07/04 13:49, 21F
騎腳踏車也不難,但是在我會騎腳踏車以前那對我難到靠北邊 我覺得一樣的意思

07/04 13:49, , 22F
可是JS卻是個不能忽略掉的東西阿。
07/04 13:49, 22F

07/04 13:50, , 23F
以前有遇過,叫人不要寫class的傢伙是因為自己不會
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
如果把class直接列入必學基礎呢?像學java那樣……
07/04 13:56, 24F

07/04 13:57, , 25F
不光說java,其他的物件導向語言似乎沒人在吵要寫不要這
07/04 13:57, 25F

07/04 13:57, , 26F
種問題了……我們乾脆就直接想成class是必經門檻就好了
07/04 13:57, 26F

07/04 13:57, , 27F
如果「同時」學html跟server設定,我覺得那份量相當多
07/04 13:57, 27F

07/04 13:57, , 28F
所以我後面認為直接把PHP獨立成一個項目學
07/04 13:57, 28F

07/04 13:57, , 29F
python也要學module,就用類似的步伐來學吧
07/04 13:57, 29F

07/04 13:57, , 30F
只是因為語言不是原生支援PSR4所以痛苦指數會增加...
07/04 13:57, 30F
我用作者特權整理一下推文順序

07/04 13:58, , 31F
class還是得搭配design pattern否則寫出來的東西很容易
07/04 13:58, 31F

07/04 13:58, , 32F
淪為包了class的function。
07/04 13:58, 32F

07/04 13:59, , 33F
以前曾經看過一堆static function的class
07/04 13:59, 33F

07/04 14:00, , 34F
還不如直接寫 global function 算了還可以少打幾個class
07/04 14:00, 34F

07/04 14:00, , 35F
ricky講的沒錯,只是若要論循序漸進,class應該列在基本
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
這方面來說使用PSR不只是工程問題,也是政治問題
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
所以啊,既然官方有規範的那class和namespace要不要學?
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
如果大家都是遵照PSR4的autoload,後續維護整合就很簡單
07/04 14:16, 46F

07/04 14:16, , 47F
可是如果有人硬是要自己 include 然後 include path
07/04 14:16, 47F

07/04 14:17, , 48F
又不知寫在哪,其他配合的人就會相當痛苦。
07/04 14:17, 48F

07/04 14:18, , 49F
尤其是許多"老寫法"通常隱含著side effect,include 後
07/04 14:18, 49F

07/04 14:18, , 50F
東西就很神奇的跑出來, include 第二次,就很神奇的爛了
07/04 14:18, 50F

07/04 14:22, , 51F
充斥著一堆untestable code。套句現代術語
07/04 14:22, 51F

07/04 14:23, , 52F
只要是無法測試的 code 他就應該要被重構。
07/04 14:23, 52F

07/04 15:06, , 53F
老寫法對於新而言是好的,讓他們可以感受什麼叫作因需求而演
07/04 15:06, 53F

07/04 15:07, , 54F
進,然而就會冒出一群叫你直接學framework,又快又方便
07/04 15:07, 54F

07/04 17:19, , 55F
Yeah,所以說個人開發,cli tool 七八百行我覺得極限了
07/04 17:19, 55F

07/04 19:52, , 56F
推最後一句
07/04 19:52, 56F

07/05 10:09, , 57F
PHP 陣列跟字串的函式參數都不統一,總是要看提示
07/05 10:09, 57F

07/15 23:13, , 58F
07/15 23:13, 58F

08/29 10:09, , 59F
like
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
法直接從MVC、framework開始。
10/26 18:39, 63F

12/19 13:20, , 64F
很愛 PHP,但曾被它的 csv parser 搞到很抓狂 XDDD
12/19 13:20, 64F
文章代碼(AID): #1PMTcyeo (PHP)
文章代碼(AID): #1PMTcyeo (PHP)