欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

php-composer - PHP composer 包管理和class类自动载入有什么联系?越详细越好

程序员文章站 2022-05-31 15:20:26
...
PHP composer 包管理和class类自动载入有什么联系?越详细越好

回复内容:

PHP composer 包管理和class类自动载入有什么联系?越详细越好

本质而言两者关联不大

  1. 自动载入是spl_autoload_register注册的自动载入函数实现(通过重载__autoload函数也可以实现,不过不推荐,这样一来只能有一个autoload函数),你可以自己写这个函数,一般来说需要包括对namespace和class类名的解析,并且把它include进来。所有注册的自动载入函数会在PHP找不到某个类的时候依次触发。(这里的函数是一个callable对象,包括:类方法(动静皆可),Closure闭包(Lambda函数),普通函数)

  2. composer通过每个包的composer.json提供的require的配置来管理包之间的依赖,并且同时它提供了一个autoload的实现来加载这些包下面的类

  3. 只要你的代码的类的存储路径是按照PSR-4标准(推荐)和PSR-0标准来规划的,你可以利用composer的autoload来管理你自己的类,这个稍微去翻下composer的文档即可

所以composer是个包管理器,它管理的是包而不是类,不过提供了一个加载这些包内类的autoload实现,但不妨碍你自己实现一个你自己的。

  • spl_autoload_register: http://php.net/manual/zh/function.spl-autoload-register.php

  • PSR-4: http://www.php-fig.org/psr/psr-4/ 汉化: https://github.com/PizzaLiu/PHP-FIG/blob/master/PSR-4-autoloader-cn.md

  • PSR-0: http://www.php-fig.org/psr/psr-0/ 汉化: https://github.com/PizzaLiu/PHP-FIG/blob/master/PSR-0-cn.md

完全两个东西嘛
composer是把你依赖的项目从源安装,举个不是很恰当的例子,Linux系统有很多包都是相互依赖的,当package A以来package B时,B也会安装.
类自动加载是你不大可能只用一个文件或者class就处理完所有业务,比如说MVC架构,不同controller之间可能要相互调用,controllerA.php文件里没有controllerB.php的代码,只能通过类的自动加载实现.将controllerB.php加载进 A 的上下文.
这儿有一篇讲解PHP自动加载机制的可以看看PHP自动加载器