composer 与php autoload,命名空间

composer 与php autoload,命名空间

composer 是一个依赖管理软件,简单点说就是按照指定规则给你下载对应的依赖包;
composer 是第三软件 跟php 没有关系 需要独立安装;
composer 需要在对应文件夹配置composer.json 配置文件 没有配置直接执行 composer require phpoffice/phpexcel 命令会 自动帮你生成配置文件 并且对应配置好信息;
composer 下载完依赖会直接创建一个vendor 文件夹 里面有 autoload.php 自动加载文件以及其他规范的自动加载规则;

php自动加载
就是当在php 中实例化类找不到时,php 会去调用已经注册的自动加载方法,在方法里面实现类的引入
实现方式下面的方法,当在这里实例化类找不到会自动调用此方法
1:在当前文件实现 _aotuload($classname){
}

2:通过 spl_aotuload_register ($funtion) 方法注册自动加载回调函数,当出现类找不到 php 会从所有注册过的方法中顺序回调对应的方法直到找到对应类引入;

Q:自动加载如何区分同名类的路径?
A:通过命名空间,在实例化类时必须通过命名空间指定实例化那个类,然后根据命名空间去找对应的类(命名空间跟文件路径不是一致的,这里的对应关系是项目自行维护,一般情况下同一个依赖库内部相当位置是确定的);

命名空间
通过指定文件的别名区分项目中重复的类名

使用:在php 文件最开始 用 namespace xxx/xxxx 定义 主要作用是通过命名空间区分文件位置,或者说在项目中的相当位置

命名空间可以随意定义,不一定要跟文件路径吻合,但是在文件中相同命名空间只能有一个同名类,否则会报错

实例化类时 可以通过在类文件头部使用 use xxx/xxx/class 这样指定使用对应的类,注意这里 并不会自动引入对应的类,引入需要通过自动加载实现
不使用 use 关键字 也可以直接实例化是 通过 new /xxx/xxx/clsss();这样指定命名空间的实例化方式创建类,注意区分 new /xxx/classnew xxx/class (指当前文件命名空间/xxx/class)

总结: use 是使用命名空间的 关键字,这样做是在相同文件下实例化相同命名空间的类 可以少写命名空间 use 不直接引入文件,引入需要依赖自动加载机制;
命名空间是为了自动加载时区分对应的类的文件位置,如果都用 require_once 则不需要命名空间,命名空间最终目的就是在require 文件时能找准文件

自动加载 是通过回调注册方法 的方式实现,php 会一次轮询已经注册的回调方法,直到找到对应类文件,否则返回 class not fond
composer 下载的类库会使用规范的自动加载机制,使用composer 的类库只要引入 vender 文件的 autoload.php 则会实现自动加载,使用的时候要通过use 对应命名空间指定对应的类

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章