php/composer使用
composer使用
每种编程语言都有各自的包管理工具。比如Python使用Pip,nodejs使用npm,go直接用go get等。php之前使用pear来进项包管理,现在比较流行的是使用composer,所以很有必要学习composer来进项相关的包管理。
重要的概念:psr-4类加载规范、命名空间
但是,Composer 不是一个包管理器。默认情况下它不会在全局安装任何东西。因此,这仅仅是一个依赖管理。
资源
查找,发布composer的网站:https://packagist.org/login/
中文境像 https://www.phpcomposer.com/、https://docs.phpcomposer.com/
常用命令
安装composer
curl -sS https://getcomposer.org/installer | php
或者
php -r "readfile('https://getcomposer.org/installer');" | php
你可以通过 --install-dir 选项指定 Composer 的安装目录(它可以是一个绝对或相对路径):
curl -sS https://getcomposer.org/installer | php -- --install-dir=bin
切换代理
全局方式:
composer config -g repo.packagist composer https://packagist.phpcomposer.com局部方式(需要进入到项目的根目录,即与composer.json同目录):
composer config repo.packagist composer https://packagist.phpcomposer.com解除镜像:
composer config -g –unset repos.packagist
composer自定义包
参考文章
核心就是,将自定义的包放到git上,然后在composer.json中添加依赖。如下测试,再执行composer update:
"require": {
"pack/test":"dev-master"
},
"repositories":[
{
"type":"git",
"url":"https://github.com/BrucelLi/pack-test.git"
}
]
示例:见com.zip代码例子。
自动加载的原理
PHP自动加载函数 __autoload(),但是其缺点是:全局函数,只能被定义一次。加载文件比较多,其业务逻辑将非常复杂、难以维护。所以在PHP 7.2.0中已经被废弃。
例子:
<?php
function __autoload($classname) {
require_once ($classname . ".class.php");
}
自动加载需要解决两个问题:
1、如何根据一个类名确定(文件名及)文件存储的路径。
2、使用require/include加载文件。
新的解决方案:
答案就是使用一个 __autoload调用堆栈 ,不同的映射关系写到不同的 __autoload函数 中去,然后统一注册统一管理。
spl_autoload_register() 就是我们上面所说的__autoload调用堆栈,我们可以向这个函数注册多个我们自己的 autoload() 函数,当 PHP 找不到类名时,PHP就会调用这个堆栈,然后去调用自定义的 autoload() 函数,实现自动加载功能。如果我们不向这个函数输入任何参数,那么就会默认注册 spl_autoload() 函数。