看板 PHP 關於我們 聯絡資訊
這是前天晚上在 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
bibo9901: PHP語言本身就一堆問題, 愈修愈爛而已 07/03 14:15
GALINE: 也沒糟到那麼不堪用... 07/03 14:54
newton2009: 不管黑貓、白貓,能抓到老鼠的就是好貓。 07/03 15:58
crossdunk: 有一堆問題嗎,用起來感覺還好 07/03 16:17
crossdunk: Laravel本來就是PHP有一定程度才會開始學的吧 07/03 16:17
swallowcc: 不只是Laravel吧, framework都是, 剛開始還是native吧 07/03 16:36
y2468101216: php有一件一定要用extension才能做的事情,異步處理 07/03 16:52
y2468101216: 。 07/03 16:52
GALINE: 其實不是不行,php可以fork...但確實很難用......... 07/03 17:56
lambo: 我覺得php的好處就是網頁很便利阿, python網頁都MVC... 07/03 20:48
fri13: 看得懂簽名檔應該有一定年紀了 你好我是坐你對面的泳褲XD 07/03 21:20
MOONRAKER: 一樓寫一下一堆是哪一堆 至少要寫500字 謝謝 07/04 11:01
我來寫好了,我很愛 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 平起平坐...
MOONRAKER: Laravel的確複雜到不適合當教學工具 07/04 11:02
MOONRAKER: 適合production用的東東不一定適合教學 07/04 11:22
我覺得光是 namespace 跟 class 的概念就不適合當新手村任務了。 其實看板上的文章有時候也會這種感覺。明顯看起來就是不太會寫程式的新人 拿著(有點老的)書上的範例來問,然後換來「千萬不要這樣寫」的回答 作為工作,我舉雙手贊同。 但是作為學習,我總覺得那些「應該這樣寫」的東西新人吃得下去也是很厲害
newversion: FB: 我們用爛語言,也能稱霸那麼久 XD 07/04 11:58
tkdmaf: 總是有一些人,自己技術爛,掌握不好東西……就怪人家 07/04 12:20
tkdmaf: 問題多多……結果根本就自己問題多多。 07/04 12:20
rickysu: 其實PHP在這幾年有相當大的變革,從語法到VM本身 07/04 13:47
rickysu: 如果真的要說爛,應該沒有人會說 JS 是個好語言。 07/04 13:48
我覺得要挑出不好的地方很容易 更何況 Personal Home Page 工具包(笑)一開始根本不是個語言 但有就算很多缺點,他還是可以做出 Facebook、KKBOX、或 Gameboy 模擬器。 很多缺點跟他不好用根本是兩個獨立命題
tkdmaf: 其實namespace和class並沒有那麼難懂…… 07/04 13:49
tkdmaf: 但我比較常看到不懂的人說他難…… 07/04 13:49
騎腳踏車也不難,但是在我會騎腳踏車以前那對我難到靠北邊 我覺得一樣的意思
rickysu: 可是JS卻是個不能忽略掉的東西阿。 07/04 13:49
tkdmaf: 以前有遇過,叫人不要寫class的傢伙是因為自己不會 07/04 13:50
我覺得不是「不要寫 Class」 這年頭不分 class 不用 namespace 不太容易寫出能維護的 code 不是做不到,但能做到的不多而且一定是老手 但是 class / namespace 這是否是好的新手村任務,我懷疑。 我認為這至少是新手村畢業任務甚至是一轉任務之類的... ※ 編輯: GALINE (60.248.122.205), 07/04/2017 13:55:56
tkdmaf: 如果把class直接列入必學基礎呢?像學java那樣…… 07/04 13:56
tkdmaf: 不光說java,其他的物件導向語言似乎沒人在吵要寫不要這 07/04 13:57
tkdmaf: 種問題了……我們乾脆就直接想成class是必經門檻就好了 07/04 13:57
GALINE: 如果「同時」學html跟server設定,我覺得那份量相當多 07/04 13:57
GALINE: 所以我後面認為直接把PHP獨立成一個項目學 07/04 13:57
GALINE: python也要學module,就用類似的步伐來學吧 07/04 13:57
GALINE: 只是因為語言不是原生支援PSR4所以痛苦指數會增加... 07/04 13:57
我用作者特權整理一下推文順序
rickysu: class還是得搭配design pattern否則寫出來的東西很容易 07/04 13:58
rickysu: 淪為包了class的function。 07/04 13:58
rickysu: 以前曾經看過一堆static function的class 07/04 13:59
rickysu: 還不如直接寫 global function 算了還可以少打幾個class 07/04 14:00
tkdmaf: ricky講的沒錯,只是若要論循序漸進,class應該列在基本 07/04 14:00
※ 編輯: GALINE (60.248.122.205), 07/04/2017 14:02:44
GALINE: 另外我覺得以個人開發「老寫法」其實沒有想像中的差 07/04 14:03
GALINE: 但是需要自己非常遵守很多容易被打破的紀律 07/04 14:04
GALINE: 不過多人開發除非是很有默契的強者不然會很容易亂... 07/04 14:05
tkdmaf: 所以啊,有現成的經驗和規範也有書了,不學那些要自幹經驗 07/04 14:05
GALINE: 這方面來說使用PSR不只是工程問題,也是政治問題 07/04 14:05
tkdmaf: 的話就自然相對累人。撞牆法則也不是每個人都像我駕輕就熟 07/04 14:06
GALINE: 同事或主管訂的規範會被靠北,那「官方」規範總行了吧 07/04 14:06
tkdmaf: 所以啊,既然官方有規範的那class和namespace要不要學? 07/04 14:08
tkdmaf: 要嘛……大家都學好,大家都守規範,大家都輕鬆。 07/04 14:09
tkdmaf: 不然來個新人,跟你這個沒學過那個不會規範不懂你不累死? 07/04 14:09
rickysu: 如果大家都是遵照PSR4的autoload,後續維護整合就很簡單 07/04 14:16
rickysu: 可是如果有人硬是要自己 include 然後 include path 07/04 14:16
rickysu: 又不知寫在哪,其他配合的人就會相當痛苦。 07/04 14:17
rickysu: 尤其是許多"老寫法"通常隱含著side effect,include 後 07/04 14:18
rickysu: 東西就很神奇的跑出來, include 第二次,就很神奇的爛了 07/04 14:18
rickysu: 充斥著一堆untestable code。套句現代術語 07/04 14:22
rickysu: 只要是無法測試的 code 他就應該要被重構。 07/04 14:23
gname: 老寫法對於新而言是好的,讓他們可以感受什麼叫作因需求而演 07/04 15:06
gname: 進,然而就會冒出一群叫你直接學framework,又快又方便 07/04 15:07
GALINE: Yeah,所以說個人開發,cli tool 七八百行我覺得極限了 07/04 17:19
agda: 推最後一句 07/04 19:52
xdraculax: PHP 陣列跟字串的函式參數都不統一,總是要看提示 07/05 10:09
nfsong: 推 07/15 23:13
JohnRoyer: like 08/29 10:09
see7di: 沒有意義的爭論,有這個時間不如多學幾種語言,做項目時 08/29 19:20
see7di: 多增加幾種可選項 08/29 19:20
crow1270: 身為新手在幾個月後來看這篇終於看懂了,大推新手根本無 10/26 18:39
crow1270: 法直接從MVC、framework開始。 10/26 18:39
kevinheyo: 很愛 PHP,但曾被它的 csv parser 搞到很抓狂 XDDD 12/19 13:20