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)领域形成的三大范式…

如何查看mysql8.0的默认密码_MySQL8.0安装之后查找默认密码

MySQL8.0和MySQL5.7具有众多不同之处,此处不赘述。这里,只简单讲讲在安装过程中遇到的问题之一和解决办法: MySQL8.0安装完成之后的默认密码是多少?如何修改初始密码? 1 启动MySQL服务 启动MySQL服务的命令: shell> sudo service mysqld start Starting mysqld:[ OK ]…

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

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

mysql update nowait_MySQL 8.0新特性 -- nowait以及skip locked

如果某行记录被事务锁住了&#xff0c;select ... for update、或select ... for share事务对相同的行加锁的时候必须等待&#xff0c;直到产生阻塞的事务释放锁。为了避免等待事务释放锁定的行&#xff0c;nowait和skip locked选项可以被用于select ... for update或select ..…

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

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

mysql主从是同步还是异步_mysql主从同步异步场景的分析

之所以进行这块内容的研究&#xff0c;主要针对之前遇到的两个未解的疑惑&#xff1a;a&#xff0e; 线上有个系统&#xff0c;半同步状态经常从半同步变成异步&#xff0c;然后又马上恢复为半同步&#xff0c;具体原因未明&#xff0c;虽然之前也猜得八九不离十&#xff0c;但…

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

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

mysql不能设置密码_mysql不能设置密码

你的位置:问答吧-> FreeBSD-> 问题详情mysql不能设置密码ports安装mysql-4.0.15,设置密码时&#xff1a;# mysqladmin -u root password 2568723630mysqladmin: unable to change password; error: Access denied for user: localhost to database mysql也不能添加数据库…

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

来源&#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;对它的发展现状和未来都非常迷惑。 不管是对科技巨头…

debconf-set-selections mysql_docker 静默安装mysql

1.功能作用在debconf database中插入默认值2.位置/usr/bin/debconf-set-selections3.格式用法debconf-set-selections [-vcu] [file]4.主要参数123-v,--verbose显示运行过程信息-c,--checkonly只检查输入文件的格式-u,--unseen在预置参数时&#xff0c;不设置‘seen‘标识5.应用…

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

来源&#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份科技趋势相…

mysql dns反向解析_Mysql DNS反向解析导致连接超时过程分析(skip-name-resolve)

Mysql DNS反向解析导致连接超时过程分析(skip-name-resolve)时间&#xff1a;2019-01-19 11:28作者&#xff1a;网友投稿MySQL数据库收到一个网络连接后&#xff0c;首先拿到对方的IP地址&#xff0c;然后对这个IP地址进行反向DNS解析从而得到这个IP地址对应的主机名。用主机名…

[机器人-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 下的中国棋手柯…

mysql 窗口函数最新一条_MySQL 8.0 窗口函数(window functions)

窗口函数(window functions)是数据库的标准功能之一&#xff0c;主流的数据库比如Oracle&#xff0c;PostgreSQL都支持窗口函数功能&#xff0c;MySQL 直到 8.0 版本才开始支持窗口函数。窗口函数&#xff0c;简单来说就是对于一个查询SQL&#xff0c;将其结果集按指定的规则进…