composer 路径_深入学习Composer原理(三)

本系列第三篇文章,一起了解下PSR规范中的PSR4和PSR0规范

首先恭喜大家,包括我自己,坚持到了现在。这篇文章之后,Composer的基础原理就清晰明了咯。也就是说,Composer所利用的正是spl_autoload_register()和PSR4规范,然后通过线上服务器存储包,来实现包管理的功能。spl_autoload_register()的作用我们已经清楚了,主要就是动态加载我们所需要的文件。然而我们的文件不可能都乱七八糟的随便找个目录放下,然后注册一堆的spl_autoload_register()来加载吧,要真这么写,估计你的老板会废了你。在这个时候,PSR路径规范的作用就显示出来咯!!

本文参考PSR规范:https://psr.phphub.org/

PSR4的格式

<命名空间>(<子命名空间>)*类名

具体的内容直接上文中提供的参考链接,这里总结重要的几点:

  • 顶级命名空间必须有一个
  • 子命名空间可以多个或没有
  • 类名必须有
  • 大小写敏感,下划线无实际意义(注意,下划线是主要的和PSR0的区别)

类名与文件载入的对应

  • 去掉最前面的命名空间的分隔符,前面的命名空间作为[命名空间前缀],必须与至少一个[文件基目录]对应
  • 子命名空间与[文件基目录]下的文件夹对应,命名空间分隔符号作为目录分隔符号
  • 末尾的类名,与最终目录下的对应的.php文件相同
  • autoload的实现不可出现异常,也就是要解决掉异常问题

估计各位看得一脸懵逼吧!!

其实很好理解,举例说明,我们先建立一个目录叫myvendor,里面放着常用的工具包,如图:

91b06a4d93ddc26601fcb6498a0accdf.png

那么TestClass.php的命名空间应该是Test,而CaseClass的应该是CaseModelCaseChild。统一从myvendor这个文件夹作为入口进入。也就是myvendor是一个超级[基目录],然后Test和CaseModel是对应命名空间的两个[文件基目录],剩下的子个名空间与目录对应。官网中还有其他的展示方式,但在这里我们用这种最标准的方式。

其实说白了,就是命名空间和目录对应上,写代码找文件就方便得很啦!!

上面说的是PSR4的规范,那么PSR0又是什么鬼?目前来说PSR0已经废弃了,它们两个大部分内容还是相近的,最大的区别在于PSR0中的_这个符号是有意义的,也就是/namespace/package/Class_Name这样的内容,会去提供/namespace/package/Class/Name.php文件,而PSR4中则忽略_这个符号的意义,还是去查找Class_Name.php这个文件。

TestClass.php代码
<?phpnamespace Test;class TestClass
{public function show(){echo "we are family!n";}
}
CaseClass.php代码
<?phpnamespace CaseModelCaseChild;class CaseClass
{public function show(){echo "Good!n";}
}

接下来,在myvendor目录外面添加一个psr4.php文件,代码如下:

<?phpspl_autoload_register(function ($class) {$vendor = __DIR__ . '/myvendor';$file   = $vendor . '/' . str_replace('', '/', $class) . '.php';if (file_exists($file)) {require $file;}
});use CaseModelCaseChildCaseClass;
use TestTestClass;$t = new TestClass();
$t->show();$c = new CaseClass();
$c->show();

神奇的事情发生了,文件自动加载进来了,有点高大上吧,至此,关于Composer的自动加载部分就结束了。我们一起学习到了PHP是如何通过spl_autoload_register方法来自动加载文件,并且通过PSR4规范来形成约束,让大家都有一套统一的规范。而这些,正是Composer的灵魂和肉身。

完整源码:https://github.com/zhangyue0503/php-blog-code-resource/tree/master/composer/base/psr4namespace

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/498442.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

科普丨深度学习 vs 概率图模型 vs 逻辑学

来源&#xff1a;人工智能爱好者俱乐部 概要&#xff1a;许多早期的人工智能工作都是关注逻辑、自动定理证明和操纵各种符号。John McCarthy于1959年写的那篇开创性论文取名为《常识编程》也是顺势而为。 今天&#xff0c;我们一起来回顾过去50年人工智能(AI)领域形成的三大范式…

浅析未来大数据的发展趋势

来源&#xff1a;36大数据 概要&#xff1a;随着我国进入大数据时代&#xff0c;很多人对于大数据的发展趋势还处于懵懂的状态&#xff0c;充分提升大数据的应用对于我国各个行业&#xff0c;都会有非常重要和有效的指导性作用。 随着我国进入大数据时代&#xff0c;很多人对于…

微软 CEO 纳德拉访谈:人工智能的大方向与未来是什么?

来源&#xff1a;36氪 概要&#xff1a;我们都对科技的发展抱有乐观的态度&#xff0c;我们坚信&#xff0c;人工智能带来的挑战是让我们和社会定义什么是真正的人类。未来将会是一个人工智能强化和增强人类能力的世界&#xff0c;而不是让人类变得更加无用。 人工智能的未来到…

不用恐惧AI的高速发展,论击败阿法狗(零)最简单的方法

作者&#xff1a;刘锋 计算机博士&#xff0c;互联网进化论作者 10月19日凌晨&#xff0c;在国际学术期刊《自然》&#xff08;Nature&#xff09;上发表的一篇研究论文中&#xff0c;谷歌下属公司Deepmind报告新版程序AlphaGo Zero&#xff1a;从空白状态学起&#xff0c;在无…

神经网络中的「注意力」是什么?怎么用?

来源&#xff1a;转载自公众号「雷克世界」微信号&#xff1a;ROBO_AI 编译&#xff1a;嗯~阿童木呀、多啦A亮 概要&#xff1a;神经网络中的注意力机制&#xff08;Attention mechanisms&#xff09;&#xff0c;也被称为“神经注意力”或“注意力”&#xff0c;最近吸引了广泛…

redis配置mysql缓存_Redis做mysql的缓存服务器

一redis简介&#xff1a;redis 是一个高性能的 key-value 数据库。 redis 的出现,很大程度补偿了memcached 这类 keyvalue 存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了 Python,Ruby,Erlang,PHP 客户端,使用很方便。Redis 的所有数据都是保存在内存中,然…

2018 年将打响 AI 战争,7 条实战经验帮你战胜恐惧

来源&#xff1a;36氪 概要&#xff1a;不管是对科技巨头还是对创业公司&#xff0c;人工智能可以说是移动互联网时代以来最大的一个机遇。但是&#xff0c;人工智能同时也是让大多数人感到非常困惑的一项新技术&#xff0c;对它的发展现状和未来都非常迷惑。 不管是对科技巨头…

人工智能对医疗行业影响的专题研究:基本结论

来源&#xff1a;本翼资本 概要&#xff1a;从未来5-7年的中期来看&#xff0c;我们认为计算智能和部分感知智能将迎来机会&#xff0c;计算智能的基因检测和药物发现、感知智能中的医疗智能语音、医疗智能视觉、可穿戴医疗设备等将迎来爆发。 从未来5-7年的中期来看&#x…

谷歌的量子计算机如何改变世界

来源&#xff1a;网易科技 概要&#xff1a;“可正常运作的话&#xff0c;量子计算机将会改变整个世界&#xff0c;改变事物的运作方式。”硅谷知名风投Andreessen Horowitz合伙人、物理学家维贾伊潘德&#xff08;Vijay Pande&#xff09;说道。 10月17日消息&#xff0c;华尔…

layer加载的页面偶尔出现空白_Layer-Cake 模式的设计

人们通常不会阅读网页&#xff0c;应用程序甚至文章或文本段落中的每个单词。相反&#xff0c;他们经常进行浏览 -因为他们在许多网站上的经验告诉他们&#xff0c;浏览可以用更少的时间和精力来提供几乎相同的价值(即信息量)。页面的可视化布局结构方式在人们浏览内容方面起着…

未来30年的科技发展趋势

来源&#xff1a;DeepTech深科技、全球创新论坛 概要&#xff1a;20项最值得关注的科技发展趋势&#xff0c;带你通向未来。 美国公布了一份长达35页的《2016-2045年新兴科技趋势报告》。该报告是在美国过去五年内由政府机构、咨询机构、智囊团、科研机构等发表的32份科技趋势相…

[机器人-3]:开源MIT Min cheetah机械狗设计(三):嵌入式硬件设计

目录 概述&#xff1a; 1、硬件组成 2、通信速率 3、通信协议 4、mbedOS 概述&#xff1a; 以1条腿进行设计&#xff0c;其它腿也一样&#xff1a; 腿部硬件组成 1、硬件组成 1&#xff09;UP board计算机板卡&#xff08;Linux OS&#xff09;&#xff1a; 腿部控制器…

AlphaGo Zero的伟大与局限——ResNet作者、旷视研究院院长孙剑深度评述

来源&#xff1a;Megvii旷视科技 概要&#xff1a;2017年10月19日&#xff0c;Deepmind 团队发布强化版的 AlphaGo Zero&#xff0c;该版本的 AlphaGo 实现了在 AI 发展中非常有意义的一步——“无师自通”&#xff0c;这也让去年败在未升级版本 AlphaGo Master 下的中国棋手柯…

《人类简史》作者:应对 AI 革命,要打造新的经济、社会和教育体系

来源&#xff1a;36氪 概要&#xff1a;正在进行的人工智能革命将改变几乎所有的工作&#xff0c;给社会和经济的发展带来机遇和挑战。一些人认为&#xff0c;人工智能将把人类赶出就业市场&#xff0c;创造一个新的“无用的阶层”&#xff1b;另一些人则认为&#xff0c;自动化…

全球厂商已向自动驾驶投入800亿美元 依然群龙无首 | 厚势

来源&#xff1a; 腾讯科技 概要&#xff1a;近日发表的一份权威研究报告指出&#xff0c;全球厂商已经在自动驾驶领域投资 800 亿美元&#xff0c;但是迄今为止&#xff0c;仍然没有一家明显处于领先优势的厂商。 自动驾驶和电动车成为当下科技行业两大热点之一&#xff0c;几…

promise的状态值_什么是Promise,Promise的三种状态

什么是Promise对象&#xff1a;Js中进行异步编程的新的解决方案&#xff0c;用于表示一个异步操作的最终完成 (或失败), 及其结果值.。语法上&#xff1a;promise是一个构造函数简单来说&#xff0c;promise对象用来封装一个异步操作并可以获取其结果语法&#xff1a;new Promi…

埃森哲报告:2017年数字化浪潮下的医疗行业五大趋势

来源&#xff1a;AI掘金志 概要&#xff1a;日前&#xff0c;埃森哲发布了《2017年数字化健康技术展望》报告&#xff0c;分析了数字化浪潮下的医疗护理行业的实际落地情况和发展前景&#xff0c;主要围绕着AI、生态系统建设、新型医疗人才挖掘、新的监督法规等五个方面进行解…

人类如何从不同角度识别物体?你需要对「小样本学习」有所了解

来源&#xff1a;转载自公众号「雷克世界」微信号&#xff1a;ROBO_AI 编译&#xff1a;嗯~阿童木呀、多啦A亮 概要&#xff1a;在视觉层次结构的较低层次&#xff0c;不变性使你可以识别矩形或线条&#xff0c;即使它是倾斜、旋转或缩放的&#xff1b;而在更高的层次上&#x…

摩尔定律已死?GPU会取代CPU的位置吗?

来源&#xff1a;全球人工智能 概要&#xff1a;CPU和GPU之所以大不相同&#xff0c;是由于其设计目标的不同&#xff0c;它们分别针对了两种不同的应用场景。 京举办的NVIDIA GTC China会议中&#xff0c;无论是AI智能运算&#xff0c;还是服务器数据中心、智能城市&#xff…

mysql 终端模拟_mysql客户端模拟脏读、幻读和可重复读

如果操作一下时报出错误&#xff1a;在数据库中执行 SET GLOBAL BINLOG_FORMAT mixed;执行后可通过SELECT * FROM information_schema.GLOBAL_VARIABLES WHERE VARIABLE_NAME ‘BINLOG_FORMAT’ ;进行查看。通过客户端选择可用数据库&#xff1a;use db_test(模拟数据库)以下…