PHP 板


LINE

看板 PHP  RSS
这是前天晚上在 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://webptt.com/cn.aspx?n=bbs/PHP/M.1499060668.A.A32.html
1F:→ bibo9901: PHP语言本身就一堆问题, 愈修愈烂而已 07/03 14:15
2F:→ GALINE: 也没糟到那麽不堪用... 07/03 14:54
3F:推 newton2009: 不管黑猫、白猫,能抓到老鼠的就是好猫。 07/03 15:58
4F:推 crossdunk: 有一堆问题吗,用起来感觉还好 07/03 16:17
5F:→ crossdunk: Laravel本来就是PHP有一定程度才会开始学的吧 07/03 16:17
6F:→ swallowcc: 不只是Laravel吧, framework都是, 刚开始还是native吧 07/03 16:36
7F:推 y2468101216: php有一件一定要用extension才能做的事情,异步处理 07/03 16:52
8F:→ y2468101216: 。 07/03 16:52
9F:→ GALINE: 其实不是不行,php可以fork...但确实很难用......... 07/03 17:56
10F:推 lambo: 我觉得php的好处就是网页很便利阿, python网页都MVC... 07/03 20:48
11F:推 fri13: 看得懂签名档应该有一定年纪了 你好我是坐你对面的泳裤XD 07/03 21:20
12F:→ 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 平起平坐...
13F:→ MOONRAKER: Laravel的确复杂到不适合当教学工具 07/04 11:02
14F:→ MOONRAKER: 适合production用的东东不一定适合教学 07/04 11:22
我觉得光是 namespace 跟 class 的概念就不适合当新手村任务了。 其实看板上的文章有时候也会这种感觉。明显看起来就是不太会写程式的新人 拿着(有点老的)书上的范例来问,然後换来「千万不要这样写」的回答 作为工作,我举双手赞同。 但是作为学习,我总觉得那些「应该这样写」的东西新人吃得下去也是很厉害
15F:推 newversion: FB: 我们用烂语言,也能称霸那麽久 XD 07/04 11:58
16F:推 tkdmaf: 总是有一些人,自己技术烂,掌握不好东西……就怪人家 07/04 12:20
17F:→ tkdmaf: 问题多多……结果根本就自己问题多多。 07/04 12:20
18F:推 rickysu: 其实PHP在这几年有相当大的变革,从语法到VM本身 07/04 13:47
19F:→ rickysu: 如果真的要说烂,应该没有人会说 JS 是个好语言。 07/04 13:48
我觉得要挑出不好的地方很容易 更何况 Personal Home Page 工具包(笑)一开始根本不是个语言 但有就算很多缺点,他还是可以做出 Facebook、KKBOX、或 Gameboy 模拟器。 很多缺点跟他不好用根本是两个独立命题
20F:→ tkdmaf: 其实namespace和class并没有那麽难懂…… 07/04 13:49
21F:→ tkdmaf: 但我比较常看到不懂的人说他难…… 07/04 13:49
骑脚踏车也不难,但是在我会骑脚踏车以前那对我难到靠北边 我觉得一样的意思
22F:→ rickysu: 可是JS却是个不能忽略掉的东西阿。 07/04 13:49
23F:→ tkdmaf: 以前有遇过,叫人不要写class的家伙是因为自己不会 07/04 13:50
我觉得不是「不要写 Class」 这年头不分 class 不用 namespace 不太容易写出能维护的 code 不是做不到,但能做到的不多而且一定是老手 但是 class / namespace 这是否是好的新手村任务,我怀疑。 我认为这至少是新手村毕业任务甚至是一转任务之类的... ※ 编辑: GALINE (60.248.122.205), 07/04/2017 13:55:56
24F:→ tkdmaf: 如果把class直接列入必学基础呢?像学java那样…… 07/04 13:56
25F:→ tkdmaf: 不光说java,其他的物件导向语言似乎没人在吵要写不要这 07/04 13:57
26F:→ tkdmaf: 种问题了……我们乾脆就直接想成class是必经门槛就好了 07/04 13:57
27F:→ GALINE: 如果「同时」学html跟server设定,我觉得那份量相当多 07/04 13:57
28F:→ GALINE: 所以我後面认为直接把PHP独立成一个项目学 07/04 13:57
29F:→ GALINE: python也要学module,就用类似的步伐来学吧 07/04 13:57
30F:→ GALINE: 只是因为语言不是原生支援PSR4所以痛苦指数会增加... 07/04 13:57
我用作者特权整理一下推文顺序
31F:推 rickysu: class还是得搭配design pattern否则写出来的东西很容易 07/04 13:58
32F:→ rickysu: 沦为包了class的function。 07/04 13:58
33F:→ rickysu: 以前曾经看过一堆static function的class 07/04 13:59
34F:→ rickysu: 还不如直接写 global function 算了还可以少打几个class 07/04 14:00
35F:推 tkdmaf: ricky讲的没错,只是若要论循序渐进,class应该列在基本 07/04 14:00
※ 编辑: GALINE (60.248.122.205), 07/04/2017 14:02:44
36F:→ GALINE: 另外我觉得以个人开发「老写法」其实没有想像中的差 07/04 14:03
37F:→ GALINE: 但是需要自己非常遵守很多容易被打破的纪律 07/04 14:04
38F:→ GALINE: 不过多人开发除非是很有默契的强者不然会很容易乱... 07/04 14:05
39F:推 tkdmaf: 所以啊,有现成的经验和规范也有书了,不学那些要自干经验 07/04 14:05
40F:→ GALINE: 这方面来说使用PSR不只是工程问题,也是政治问题 07/04 14:05
41F:→ tkdmaf: 的话就自然相对累人。撞墙法则也不是每个人都像我驾轻就熟 07/04 14:06
42F:→ GALINE: 同事或主管订的规范会被靠北,那「官方」规范总行了吧 07/04 14:06
43F:推 tkdmaf: 所以啊,既然官方有规范的那class和namespace要不要学? 07/04 14:08
44F:→ tkdmaf: 要嘛……大家都学好,大家都守规范,大家都轻松。 07/04 14:09
45F:→ tkdmaf: 不然来个新人,跟你这个没学过那个不会规范不懂你不累死? 07/04 14:09
46F:推 rickysu: 如果大家都是遵照PSR4的autoload,後续维护整合就很简单 07/04 14:16
47F:→ rickysu: 可是如果有人硬是要自己 include 然後 include path 07/04 14:16
48F:→ rickysu: 又不知写在哪,其他配合的人就会相当痛苦。 07/04 14:17
49F:→ rickysu: 尤其是许多"老写法"通常隐含着side effect,include 後 07/04 14:18
50F:→ rickysu: 东西就很神奇的跑出来, include 第二次,就很神奇的烂了 07/04 14:18
51F:→ rickysu: 充斥着一堆untestable code。套句现代术语 07/04 14:22
52F:→ rickysu: 只要是无法测试的 code 他就应该要被重构。 07/04 14:23
53F:推 gname: 老写法对於新而言是好的,让他们可以感受什麽叫作因需求而演 07/04 15:06
54F:→ gname: 进,然而就会冒出一群叫你直接学framework,又快又方便 07/04 15:07
55F:→ GALINE: Yeah,所以说个人开发,cli tool 七八百行我觉得极限了 07/04 17:19
56F:推 agda: 推最後一句 07/04 19:52
57F:推 xdraculax: PHP 阵列跟字串的函式参数都不统一,总是要看提示 07/05 10:09
58F:推 nfsong: 推 07/15 23:13
59F:推 JohnRoyer: like 08/29 10:09
60F:→ see7di: 没有意义的争论,有这个时间不如多学几种语言,做项目时 08/29 19:20
61F:→ see7di: 多增加几种可选项 08/29 19:20
62F:推 crow1270: 身为新手在几个月後来看这篇终於看懂了,大推新手根本无 10/26 18:39
63F:→ crow1270: 法直接从MVC、framework开始。 10/26 18:39
64F:推 kevinheyo: 很爱 PHP,但曾被它的 csv parser 搞到很抓狂 XDDD 12/19 13:20







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP