php-composer - PHP composer 包管理和class类自动载入有什么联系?越详细越好
怪我咯
怪我咯 2017-04-10 16:09:22
[PHP讨论组]

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

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(2)
阿神

本质而言两者关联不大

  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自动加载器

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号