首页 > php许多框架直接通过命名空间导入相关类,但是命名空间其实没那个功能?解释一下啊

php许多框架直接通过命名空间导入相关类,但是命名空间其实没那个功能?解释一下啊

php许多框架直接通过命名空间导入相关类,但是命名空间其实没那个功能?解释一下啊

导入一个类使用require_once include_once()...

但是许多框架,诸如thinkphp,laravel等并没有通过这些方法,而是通过命名空间

这是怎么回事呢?


另外两位的答案都提到了一些点, 但是不够完整

首先这是自动加载的特性

PHP5中引入了自动加载, 你可以使用spl_autoload_register注册一个自动加载函数, 当PHP在找一个内存中还不存在的类时, 就会依次调用spl_autoload_register注册进来的自动加载函数来寻找类

另一个也可用但是不好的方式是通过覆盖__autoload函数, 只是这样你就只能有一个自动加载函数了, 如果你还用一些其它类库, 可能会产生一些问题, 所以并不建议这么做

至于composer, 它带了一个标准的autoload实现, 如果你可以让自己的代码遵循PSR的目录组织方式, 也可以直接用composer提供的autoload的实现, 可以简单去了解一下PSR

需要注意的事, 自动加载这个特性和命名空间是无关的, 虽然推荐它和命名空间一起使用, 但是你会在一些老PHP代码中发现其实是用下划线_来变通的实现了命名空间的效果的


你可以查下 命名空间use的用法,是use引入类,所以不需要require_once include_once()...
而use其实是没有引入功能的,只是程序自动加载了__autoload方法便引入了相关类


有的,只是不是直接写在逻辑代码里,你的问题,你可以试着搜下php自动加载,composer自动加载

【热门文章】
【热门文章】