关于php命名空间的理解
理解命名空间首先要知道命名空间的作用,也就是它的出现解决了那些问题
官方给出的解决的问题是:
- 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
- 为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。
可以看下这篇文章:https://blog.csdn.net/zhanghuiqi205/article/details/84671608
https://www.php.cn/php-weizijiaocheng-414933.html
从ThinkPHP5.0
开始,遵循PSR-4
自动加载规范,只需要给类库正确定义所在的命名空间,并且命名空间的路径与类库文件的目录一致,那么就可以实现类的自动加载,从而实现真正的惰性加载。
以phpmailer这个类库为例,composer自动加载好该类库,有用的文件都放在src这个目录下
这些文件的命名空间都是这个:namespace PHPMailer\PHPMailer;
如果我们要使用PHPMailer这个类,需要use PHPMailer\PHPMailer\PHPMailer;所以文件名要和类名一致(但是如果一个文件里有多个类应该如何使用,所以在一个文件中尽量不要定义多个类)
命名空间与文件的路径有时可能不一样,这个就是,PHPMailer的类文件路径是phpmailer\phpmailer\src\PHPMailer.php,命名空间却是PHPMailer\PHPMailer,这是因为在composer加载时就对命名空间与路径进行了绑定,如下图:
thinkphp5 composer加载的类库在vendor目录下,自己下载的类库放在extend目录下,extend目录下的类库可以实现自动加载,