作者GALINE (天真可爱CQD)
看板Soft_Job
标题Re: [请益] php code在最後一行才require
时间Thu May 26 12:21:38 2016
※ 引述《pracinverse (改)》之铭言:
: 最近看到PHP的一种用法就是在a.php的最後一行才requrie(b.php);
: 看起来是因为前人想要在a.php里面先做一些处理後,再去用到b.php的功能,
: 而这种很不OO的方式来做code reuse实在让我觉得不太习惯,
: 一来一般programming language都是在最一开始去把需用到的其他file include进来,
: 二来要code reuse应该要包成class才能达到封装的目的。
: 这种"在a.php的最後一行requrie(b.php);"的用法
: 在PHP里面算是很常见的用法吗??
: 它算不算一种不好的practice呢?
这很烂,但当年写出这种 code 的人不是傻,是没有招可以出
PHP 到 2009 年才有 namespace,autoloading 的规范 PSR-0 是 2010 还 2011 的事
2012 年才有 composer 这个套件管理系统(以前有pear,但得动到系统...)
在那之前,你就算 OO 了你也很难组织你的 code 该怎麽放或啥时载入
而人家写好的 lib 你得透过一连串的 include 地狱来载入
所以会看到一些现在看起来莫名其妙的做法,例如
- include 一个会 include 几十个档案的 php
(不容易有效的载入 lib,於是搞出个类似 .h 档的东西...)
- 满天飞的 global
(没办法用 namespace 去区隔 class,不如全部先在一个地方先 new 出来备用)
- 为了确保逻辑重用,每个地方都 include 同一个 php
(不知道怎麽 call 同一个 class 的某个 function,或是没有现代 framework 辅助)
过去 PHP 名声臭是有原因的,人家已经在21世纪了,PHP 还在打二战...
composer 出现之後没几年,PHP 已经脱胎换骨,变成符合 21 水准的超级 PHP。
然而程式码被汰换的速度跟不上这超英赶美大跃进
除非能短短两三年就把整间公司的 code 全部打掉重来...
这是一场 PHP 的文化大革命
--
推荐阅读:现代PHP
http://www.books.com.tw/products/0010688181
--
顶天立地:爱孩子就要支持萝莉控
http://goo.gl/Bha7e
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 60.248.122.206
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1464236501.A.BCC.html
※ 编辑: GALINE (60.248.122.206), 05/26/2016 12:25:21
1F:推 crossdunk: 但就算php比较符合现在水准了,还是很多人看不起他 05/26 12:33
2F:推 Mtcat: 推推 05/26 12:34
3F:推 dreamnook: 资讯推 05/26 12:35
4F:→ dreamnook: 话说为啥不能支持正太控(误 05/26 12:36
※ 编辑: GALINE (60.248.122.206), 05/26/2016 12:41:54
5F:→ comesuck: 看来我也要开始摸一下 05/26 12:43
6F:→ myhome6206: 那要学现代PHP 除了那本欧来梨的书之外 还有什麽推荐 05/26 12:56
7F:→ myhome6206: 的资源吗? 书或者网路tutorial 05/26 12:57
PHP The Right Way 繁体中文版
http://laravel-taiwan.github.io/php-the-right-way/
※ 编辑: GALINE (60.248.122.206), 05/26/2016 13:05:12
9F:→ GALINE: 阿,编辑放太久没存档结果贴了一样的东西....XDDD 05/26 13:05
10F:推 dreamnook: 推书本 book了:D 05/26 13:07
11F:→ Argos: 阿 重复贴XD 05/26 13:08
12F:推 johnny94: php 真的很妙,一个脱胎换骨的概念 05/26 14:14
13F:推 LaPass: php的这种载入机制我觉得跟C C++很像.... 05/26 14:21
14F:→ GALINE: 要我说的话抄 java 抄的比较凶。不过目前对於挂在 05/26 14:28
15F:→ GALINE: namespace 下面的 function 没有优雅的解决方案... 05/26 14:29
16F:推 PoloHuang: Modern PHP不错 05/26 15:04
17F:→ LaPass: GALINE是指JSP吗?JAVA的ClassLoader的机制跟PHP完全不一 05/26 15:30
18F:→ LaPass: 样啊.... 05/26 15:30
19F:→ LaPass: JSP才有require之类的东东 05/26 15:32
20F:→ GALINE: 是说 PSR-0 跟 PSR-4 05/26 15:47
21F:推 Luos: 原来今年没用php也进步了 05/26 16:35
22F:→ RedMapleWing: 两个连结我很下意识的点了第二个是… 05/26 17:10
23F:推 carlcarl: 人生苦短 我用Python 05/26 20:33
24F:推 fouring: 後端不会PHP是不是不行啊? 05/26 21:01
25F:→ y3k: 就算现在 PHP一样很容易写出让人看了觉得难过的东西 05/26 21:21
26F:→ y3k: 前面的包袱太重了 05/26 21:21
27F:推 crossdunk: 搭配FRAMEWORK就还好了吧 PHP的框架也进步很多呀 05/26 21:22
28F:推 sabiya: 作者推的这两联结的作者都是Josh Lockhart,我目前也有使 05/26 22:36
29F:→ sabiya: 他开发的micro web service framework,叫Slim Framework 05/26 22:37
30F:→ sabiya: 是真的蛮好用的,推荐给需要撰写restful web api的开发者 05/26 22:39
31F:推 alog: 现在有lumen 05/26 22:44
32F:推 angusyu: 清新好文 05/27 08:43
33F:→ Ekmund: 文化大革命是失败的吧=口= 05/27 08:54
34F:→ Argos: 革命当然尚未成功 PHP同志们仍需努力 团结奋斗救PHP 05/27 09:38
35F:推 kenwufederer: 推一下PHP 05/27 09:49
36F:推 et282523: 不同的时空背景有不同的作法啊,也不能说 include 一堆 05/27 10:19
37F:→ et282523: 档案就是错误的写法吧?毕竟现在 php 的 autoload 也是 05/27 10:20
38F:→ et282523: 在 __autoload 做 include ,只是不去翻看不到而以。 05/27 10:21
39F:→ et282523: 当然 autoload 是优雅很多没错啦! 05/27 10:23
用古代的做法,我碰过的问题大概是这些
- 很容易重复载入同一个 lib,於是PHP就抱怨 class/function 定义重复
- 为了避免上一点,於是到处用 include_once,然後踩到效能问题
- 其实我觉得还好。不过认识的人说踩到效能问题过,解法是把 once 们拔掉....
- 每个 lib 组织档案的方式都不同,所以 include 路径看起来就五花八门...
- 不同的档案结果取了同样的的 function name,於是 PHP 喷 error
- 统一的 include 里面什麽 lib 都 include 进来,连没用到的功能也全部载进来
- 你看到某个 function,想改他的输出值,但搜寻不到这个名字的 function
- 或是你会找到三个同名的 function,不知道该改哪个
PSR-0/PSR-4 相当程度的解决上面这些问题
composer 则是帮你把符合规范的 autoloader 写好
(好吧,其他语言是内建...)
当然上面这些用 include 的方式也不是不能解决,但是需要公司内有明确的规范
订规范就不是纯技术问题,需要政治力量(例如挺你的长官)介入...
而且就算有内规,3rd party lib 也不会照你的规则走
你换公司的时候也要重来一次
现在则是比较明确,「照PHP-FIG的规定走」,这是超越公司/组织的政治力。
不过 PHP 用以前的作法也完全可以动,现况就变成你要弄乾净可以弄的很乾净。
但你想弄脏也依然可以弄的很脏...
※ 编辑: GALINE (60.248.122.206), 05/27/2016 13:14:22
40F:→ et282523: 同意,你解释的好清楚啊,感觉学到了一些东西,感谢! 05/27 23:49
41F:推 chan15: 推超级 PHP XD 05/28 15:40
42F:推 JohnRoyer: 原 PO 请振作 XD 05/28 23:13
43F:推 side112358: PHPConf Taiwan 2016会请到现代PHP的作者,欢迎来听! 05/31 17:29
44F:推 rickysu: 帮推 PHPConf Taiwan 2016... 06/01 09:31