php 的 namespace 和 autoload 的问题-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

php 的 namespace 和 autoload 的问题

2016-04-09 11:05:01 2250 1

假设我的项目其中的一个目录:

app
== site
==== controller
====== IndexController.php
====== AccessController.php
== api
==== controller
====== PostController.php
假设 IndexController.php 的内容:

namespace appsitecontroller;

class IndexController {

// some code

}
项目是单入口,包含了 function autoload($className),我的问题:

假设项目约定了 namespace 中的名称必须和文件夹名称一致,并且类名称也和类文件同名(不包含下划线等奇怪的字符),那这样的话,$className 其实只需要把右斜杠换成 DIRECTORY_SEPARATOR 就可以找到对应的类文件了,比如:

$obj = new appsitecontrollerIndexController();
或者

class TestClass extends appsitecontrollerIndexController {}
那 autoload 实际找到的就是 /app/site/controller/IndexController.php。

既然这样,那为什么 thinkphp 里面的 Think 类还要 $_map 呢?类似的还有 laravel 里的:

autoload_namespaces.php
autoload_classmap.php
autoload_psr4.php
比如这个是 autoload_psr4.php 里的内容:

$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);

return array(

'yii\\swiftmailer\\' => array($vendorDir . '/yiisoft/yii2-swiftmailer'),
'yii\\gii\\' => array($vendorDir . '/yiisoft/yii2-gii'),
'yii\\faker\\' => array($vendorDir . '/yiisoft/yii2-faker'),
'yii\\debug\\' => array($vendorDir . '/yiisoft/yii2-debug'),
'yii\\composer\\' => array($vendorDir . '/yiisoft/yii2-composer'),
'yii\\codeception\\' => array($vendorDir . '/yiisoft/yii2-codeception'),
'yii\\bootstrap\\' => array($vendorDir . '/yiisoft/yii2-bootstrap'),
'yii\\' => array($vendorDir . '/yiisoft/yii2'),
'cebe\\markdown\\' => array($vendorDir . '/cebe/markdown'),
'Faker\\' => array($vendorDir . '/fzaninotto/faker/src/Faker'),

);
这里面通过数组定义的映射有什么作用啊?

取消 提交回答
全部回答(1)
  • idevcloud
    2019-07-17 18:40:07
    已采纳

    composer里的自动加载可以支持四种规范,psr-0(autoload_namespaces.php),psr-4,class-map,还有files,你如果自己写代码,这样约定好了,命名空间和路径保持一致,然后autoload加载按路径加载,当然不需要classmaps,但是很多类库是其他人写的,每个人习惯不一样,有的人喜欢psr-4,有的人喜欢psr-0,(大家规范都一样,声明的命名空间和路径不一样)时,就需要你说的 Classmap了,你可以看下composer的loader类

    0 0
相关问答

10

回答

【精品问答合集】Hbase热门问答

hbase小能手 2019-05-29 14:37:26 123783浏览量 回答数 10

170

回答

惊喜翻倍:免费ECS+免费环境配置~!(ECS免费体验6个月活动3月31日结束)

豆妹 2014-10-29 17:52:21 233886浏览量 回答数 170

145

回答

【新手入门】云服务器linux使用手册

fanyue88888 2012-11-26 17:14:18 160021浏览量 回答数 145

22

回答

爬虫数据管理【问答合集】

我是管理员 2018-08-10 16:37:41 148980浏览量 回答数 22

31

回答

[@倚贤][¥20]刚学完html/css/js的新手学习servlet、jsp需要注意哪些问题?

弗洛伊德6 2018-10-27 21:52:43 148089浏览量 回答数 31

3

回答

mySQL数据库报错You have an error in your SQL syntax

落地花开啦 2016-02-14 16:09:24 133593浏览量 回答数 3

82

回答

OSS入门教程

belle.zhoux 2014-07-07 17:14:27 159981浏览量 回答数 82

251

回答

阿里云LNAMP(Linux + Nginx + Apache + MySQL + PHP)环境一键安装脚本

云代维 2014-02-14 15:26:06 310353浏览量 回答数 251

97

回答

Redhat/CentOS一键安装web环境全攻略

xiaofanqie 2011-08-11 14:51:38 125082浏览量 回答数 97

14

回答

域名解析是正确的,但是网站打不开求助!

游客b4ezpaqg54gdq 2019-07-05 11:50:33 123003浏览量 回答数 14
+关注
0
文章
795
问答
问答排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载