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自定义包

参考文章

核心就是,将自定义的包放到git上,然后在composer.json中添加依赖。如下测试,再执行composer update:

"require": {
	"pack/test":"dev-master"
    },
"repositories":[
	{
		"type":"git",
		"url":"https://github.com/BrucelLi/pack-test.git"
	}
    ]

示例:见com.zip代码例子。

自动加载的原理

深入解析 composer 的自动加载原理

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() 函数。