38

php-composer作用分析

 4 years ago
source link: https://studygolang.com/articles/20346?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

项目开发过程中,拓展包的引入能够帮助我们快速且强大的开发我们的项目,js中的node install  ,golang中的go mod而php我们用的就是composer,像这样 composer require lingyuyizhipao/http

当然你也可以用原声自己慢慢造轮子,但引入可以帮助更好更快的做更多的事情,那么composer是如何帮助我们的呢,下面来好好分析分析。

其实我们的初衷是我们需要使用的对象能够给我们使用就行了,但是计算机肯定是要code加载到内存中去运行才行的啊,那就意味着每使用一个对象之前php就得require_once该对象的class文件到内存中,麻烦!spl_autoload_register 这个函数就是php专门用来解决这个问题的,它可以帮我注册一个我们自定义的函数,每当我们new一个内存中找不到的对象的时候,就会去调用我们自定义的函数,而且会把这个函数名称传到自定义函数,那么就有游戏的空间了,围绕这出现了很多标准,比如autoload_psr4,autoload_classmap,autoload_namespaces,autoload_static(这些是我在laravel自动加载中复制出来的),有对标准感兴趣的可自行百度,总之composer就是利用自动加载函数和自动加载标准规则让我们的工具类很轻松容易被引用并使用的。

composer require lingyuyizhipao/http  或者你随便composer安装一个拓展吧,你的项目根目录下就会出来

composer.json,composer.lock以及vendor文件夹,composer.json是定义composer依赖的一种标准,可自行百度每一项属性的含义,在vendor这个文件夹下有个composer文件夹,里面就是composer工作中所需要的必要文件了,每当我们composer install ,composer require , composer update, composer dump-autoload  等等等,其实就是更新里面的几个规范文件,每一个规范都对应自身的一个映射规则,你点击一看便明白要么就是命名空间映射文件路径,要么就是会自动再加点什么后缀的路径。

那么我们再来理一下啊,compsoer的各种作用命令为好好的维护好vendor/composer下的文件,里面就是一堆字符串到类文件路径的关联映射,就保证了我们的代码一种能力,当我们new一个内存中不存在的对象的时候,自动加载函数根据我们new的对象的类的名称,去composer维护的那么些文件规则中走一趟,发现了就引入,从而保证new对象的正常进行,这才是工作的真正原理,所有的规范都只为更好的被使用,但其深处的原理却只有一个,那就是必须得映射到存在的class类文件才行,因为php只认一个,new的这个对象的类文件必须存在于内存中,就此打住。

自己写一个composer包发布到composer服务器上走一遍流程。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK