Composer 依赖 在很多 PHP 商城系统中都有用到, 如 dsmall 商城. 随着项目代码量的不断增加, 以及一些库的依赖, 我们不得不引入包的管理, 来解决不易管理, 阅读, 模块化等问题. 三方库优秀, 而且很多人在维护, 功能对接也方便, 我们没有必要在这个一个常用的功能上花费时间来封装或者造轮子, 很多人在自己的项目中都实践过, 出现了问题, 反应的 issue 也很快会被解决掉, 功能也不断在完善. 一直强调, 站在巨人的肩膀上, 我们会走的更远, 也许我们自己撸出来的代码难等大雅之堂, 无法比拟, 把重心放在自己的核心产品和功能时间上, 学会借鉴学习和使用, 降低自己的开发成本. 也许有人会觉得我使用三方库可能会造成性能上的影响, 有些功能我根本用不到. 项目中代码有很多无用的代码, 导致文件加载过慢, 其实不用担心,?opcache 可以将 PHP 脚本预编译到共享内存中来提升 PHP 的性能.
PHP Composer psr-4 autoload
Composer 是 PHP 用来管理依赖关系的工具, 可以在项目中声明外部依赖的工具库, Composer 会帮你安装这些依赖的库文件 psr-4 是一种代码规范, 能够实现 package 的自动加载, 规范了如何从文件路径自动加载类, 同时也规范了自动加载文件的位置
自动加载
我们在支持 Composer 的项目中, 只需引入这个文件, 加上下面这段 PHP 的代码, 就可以得到自动加载的支持了
- <?PHP
- require_once DIR . '/vendor/autoload.php';
- Composer.JSON
- {
- "autoload": {
- "psr-4": {
- "Work\": "src/"
- },
- "psr-0": {
- "VendorNamespace": "src/"
- }
- }
}
Composer 将注册一个 PSR-4 autoloader 到 Work 命名空间, PSR-0 则支持_, 自动转化为目录结构
classmap
不遵循 PSR-0/4 规范的类库,
files
明确的指定文件加载
额外的
repositories 自定义资源包库
type
?Composer Composer 类型的资源库, 是一个简单的网络服务器上的
?vcs Git,SVN,hg 等
?Pear 从 Pear 上获取资源
?package 内联一个 Composer.JSON 对象
scripts
Composer 允许你在安装过程中的各个阶段挂接脚本.
详细流程
典型的命令, Composer 安装时
?post-install-cmd?Composer install 执行之后触发
?post-update-cmd?Composer update 执行之后触发
自定义脚本 demo
- {
- "scripts": {
- "post-update-cmd": "MyVendor\MyClass::postUpdate",
- "post-package-install": [
- "MyVendor\MyClass::postPackageInstall"
- ],
- "post-install-cmd": [
- "MyVendor\MyClass::warmCache",
- "phpunit -c app/",
- "find vendor -type d -name .git -exec rm -rf'{}'\;"
- ]
- }
}
- <?PHP
- namespace MyVendor;
- use Composer\Script\Event;
- class MyClass{
- public static function postUpdate(Event $event)
- {
- $Composer = $event->getComposer();
- // do stuff
- }
- public static function postPackageInstall(Event $event)
- {
- $installedPackage = $event->getOperation()->getPackage();
- // do stuff
- }
- public static function warmCache(Event $event)
- {
- // make cache toasty
- }
}
不然看出执行的脚本可以是一个类中的静态方法, 当然也可以是一个函数, 还可以是一条 shell 命令
我们也可以手动执行一些命令
Composer run-script [--dev] [--no-dev] script
来源: http://www.bubuko.com/infodetail-3088061.html