PHP 板


LINE

看板 PHP  RSS
PHP 的 autoload 扯到了几项相近却不相同的东西,感觉应该明确提一下.. ## __autoload() ## https://php.net/manual/en/function.autoload.php __autoload() 这个 function 可以让你定义「要载入某个 class 的时候该做什麽」 这是 PHP 尝试解救 require 地狱的第一步。不过他有几个问题 - 没办法在程式执行中改变内容,你得把所有的载入逻辑写死在这个 function 里面 - 他只能定义一种动态载入的方法。如果今天所有的 class 都是自己写的 那还好解决,自己决定好档案怎麽放就可以。如果今天是好几组人写 甚至是引用到其他人写的 code,那就会变成引用一次就要改写一次 class loader 其实很麻烦。 - 由於以上理由,以及後来有了 spl_autoload_register() 他「未来有可能」会被 deprecated。 - 江湖盛传这东西效能不好,不过我自己没什麽用这东西的经验。 而且问题有可能在於 PHP 载入 class 的效能本来就不好... - 大家都会乱想一些奇怪的 Class Name 跟档案路径定义,最後还是只有原本写 code 的人能找到那个 Class ## spl_autolaod_register() ## https://php.net/manual/en/function.spl-autoload-register.php spl_autolaod_register() 跟 __autoload() 差别有二 - 可以指定多个动态载入的方法 - 可以在执行的时候依照需要挂上不同的动态载入逻辑 这让 spl_autoload_register() 的使用弹性比 __autoload() 大很多。 现在这年头大概都是走这条路。 不过,大家还是会乱想一些奇怪的 Class Name 跟档案路径对应 最後还是只有原本写 code 的人能找到那个 Class.... ## PSR-0/PSR-4 ## http://blog.mosil.biz/2012/08/psr-0-autoloading-standard/ https://jasteralan.github.io/psr4/ PSR-0 跟 PSR-4 并不是 PHP 的功能,而是对程式设计师的道德劝说 「麻烦你们以後要做 autloading 的话,class 档案都这样设计,路径都这麽放」 这东西要解决的是「大家还是会乱想一些奇怪的 class 档案对应」这个问题 遵守这规范的人,只要看到 class 的名字就大概能知道档案会放在哪里 理论上你不管用 __autoload() 还是 spl_autoload_register() 都能写出符合 PSR-0 或 PSR-4 需求的自动载入机制。 PSR-0 跟 PSR-4 是两个不同的规范,大同但小异。 PSR-0 可以(有点别扭的)在 PHP 5.2 使用,PSR-4 就必须要用 PHP 5.3 以上了 =============================================================== 所以 composer 的自动载入大致上是 「用 spl_autoload_register() 实作了符合 PSR-0/PSR-4 规范的 autoloader」 不过 PSR-0/PSR-4 的自动载入机制非常依赖 namespace 在这样的规范下你的 Class 应该要取名成「\PTT\Board\PHP」这种感觉 写习惯其他 OO 语言(尤其是Java,整个风格超像...)的人会觉得很顺手 但是写习惯 PHP 5.2 以前的东西的人要用 namespace 应该会有一段适应期... 虽然 composer 的 autoloading 还可以设定 classmap 这种 「反正就是把整个资料夹扫过看有哪些 class 可以载入通通记起来」的搞法 可以避开 PSR-0/PSR-4 -- ______ ____________________________________ _ _-_ _ ___ / __||____________________________________| _|_|.---'---`---.|_|_ |___) |___| Let it go! Let it go! \----._________.----/ ___ Where no man has gone before! `. `]-[' ,' | |__ _________________________________________ `.' _ `.' ________ \______||_________________________________________| |_(_)_| |________) --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.27.63.55
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/PHP/M.1431717108.A.736.html
1F:推 tkdmaf: 反正就是新规则,新标准,想办法自己适应就是了。 05/16 08:32
2F:→ tkdmaf: 每件事都嘛有阵痛期,痛完就爽了。 05/16 08:32







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灯, 水草

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

TOP