假如说:a.php,定义 namespace yii\a. b.php 里面定义namespace yii\b.我在b.php里面可以使用use yii\a吗?
如果可以的话,那use 的作用域有多广。
再比如说:在同一个服务器上有A站和B站两个网站,A站目录下有上面的a.php ,B站目录下有上面的b.php ,还可以在b.php里面使用use yii\a吗?
一, 第一个问题, 需不需要把文件导入进来?
答案是 : 需要!
但是在各种框架内, 你不会直观的感受到这一点, 因为都实现自动加载了.
早期__autoload
后来 又增强版spl_autoload
现代框架都是遵循composer
自动载入标准完成
而composer
的自动加载标准又和namespace
结合了起来, 这个后面补充.
二. 第二个问题, use
的作用域是什么, 有多广?
比如 : 同一个服务器上有A站和B站
,A站下A\a
,B站有B\b
,还可以在B\b.php
里面use A\a
吗?`
答案是 : 不知道怎么回答了 = =! 只能说和几个站毫无关系…
在当前请求周期内, 只要先加载到了A\a
, 那么随后你都可以use A\a
;
这和几个项目没关系, 和文件摆放位置没关系
!!! 只和 当前请求内, 你use
的时候 有没有事先声明并include进来
有关系;
如果非要说出作用域? 只能看每次请求的实际情况
了…
三. 补充
在各种现代框架内(遵循了composer
标准的)
一般 只要你use A\a
; 就能自动加载进A\a
(当然 你确实有声明);
并不用小心翼翼的担心 我use A\a
时候, 有没有include进来呀
因为composer
就是按照namespace
来自动加载类的.
当然并不绝对(未遵循该标准的, composer
也提供有自动加载方式)
具体的标准去查一下资料吧 这里就不说了 已经很啰嗦了
了解一下php的语法吧,”use的作用域”这个概念有点”新” :http://php.net/manual/zh/language.namespaces.php