深入理解PHP中use和namespace的用法与区别,小白也能轻松掌握
作为一个新手,use和namespace确实让我困惑了很久。我真的不明白为什么我需要使用这两个东西。通过大量的查找和学习,我总结了一点自己的理解。

首先,require是用来引入外部文件的(这里require_once和include都是一样对待的)。而use只引入命名空间和类名,如“use x\test_x”,x是命名空间,test_x是类名;它简化了命名空间和类名的组合。下面实例化时,直接使用 new 类名即可;而use不需要像require一样保证路径,并且use没有路径。
下面的例子:
新建两个文件,第一个:program.php,代码如下:
第二个:testclass1.php,代码如下:
如program.php所示,如果这里使用了use,就按照:new test_x();如果注释掉 use 行,则将以下内容更改为: new x\test_x();否则会报错,所以这里使用只是起到简化的作用。
下面,测试使用自动加载机制:spl_autoload_register();
代码需要修改,program.php如下:
testclass1.php如下(该文件仅更改类名,保证类名和文件名一致):
这里也使用use来简化命名空间+类名的组合。如果没有用,则应改为:new x\testclass1。另外,自动类加载机制下,如果不修改testclass1.php文件中的类名(确保与文件名相同),总是会报错,提示找不到文件,但找不到该类。如果有人即使文件名和类名不同也能成功调用自动加载机制,请给我一些建议。
另外,我个人觉得这个用法确实很适合多人合作的时候使用。如果是自己一个小项目,我觉得没必要用。只要保证每个类名不重复就可以了。当然,直接use+require的方式是面向过程的方式,而自动加载机制+use则是面向对象的方式。不过我个人觉得,如果项目不是那么庞大,只要能解决实际问题,就不用担心面向对象还是面向过程_(小白个人观点,有些专家有不同意见,请解释一下)。