使用namespace
和use
的时候有些疑惑
在框架中随便use
某个带有namespace
(命名空间
)的文件,直接new
就可以实例化获得对象
然而 我在本地随便搞了个目录测试的时候
发现在调用有namespace
文件的时候
不能直接采用use
的方式引用,进行实例化
而是先要require
一下
才能正常实例化
然而我排查框架的时候,发现好像并没有事先requrie
要实例化的文件,但是use
之后就直接可以new
进行实例化了,请问这是什么原因呢
附上自己的本地测试目录文件
目录结构
library
-->core.php
test.php
core.php
<?php
namespace library;
class core
{
}
test.php
<?php
require_once 'library/core.php'; // 必须要require
// 第一种实例化
// use \library\core;
// $obj = new core();
// 第二种实例化
$obj = new \library\corecore();
var_dump($obj);
再附下框架中使用use的部分截图
想不通...搞不懂...
感谢各位大佬的回答,我早上一定没吃药,嗯!结帖~
补充个加载类的常识spl_autoload_register($callback);
/**
* 自动加载类库
* @param string $strClass 方法名
*/
static public function load($strClass)
{
$strClassPath = CHARM . '\' .$strClass . APPEXT;
if(in_array($strClass, self::$arrClassMap)) {
return TRUE;
}else {
if(is_file($strClassPath)) {
require_once $strClassPath;
self::$arrClassMap[$strClass] = $strClass;
}else {
throw new \Exception("找不到类库 -- " . $strCtrlFile);
}
}
}
雷雷
注册自加载 https://github.com/TIGERB/eas...
楼主用的是CI框架吧 框架已经帮你spl_autoload_register($callable);过了 通俗的说,你use哪个类,它就帮你require_once哪个类
具体代码实现可以看看CI的这个
Loader类
https://github.com/bcit-ci/Co...