TP3.2.2今天看源代码遇到一个问题Think.class.php

浏览:1736 发布日期:2015/01/29 分类:求助交流 关键字: namespace
文件地址: ThinkPHP\Library\Think\Think.class.php
里面的autoload类库自动加载方法

贴一部分代码, 看里面 $namespace = C('AUTOLOAD_NAMESPACE');public static function autoload($class) {
        // 检查是否存在映射
        if(isset(self::$_map[$class])) {
            include self::$_map[$class];
        }elseif(false !== strpos($class,'\\')){
          $name           =   strstr($class, '\\', true);
          if(in_array($name,array('Think','Org','Behavior','Com','Vendor')) || is_dir(LIB_PATH.$name)){ 
              // Library目录下面的命名空间自动定位
              $path       =   LIB_PATH;
          }else{
              // 检测自定义命名空间 否则就以模块为命名空间
              $namespace  =   C('AUTOLOAD_NAMESPACE');
              $path       =   isset($namespace[$name])? dirname($namespace[$name]).'/' : APP_PATH;
          }
          $filename       =   $path . str_replace('\\', '/', $class) . EXT;
          if(is_file($filename)) {
              // Win环境下面严格区分大小写
              if (IS_WIN && false === strpos(str_replace('/', '\\', realpath($filename)), $class . EXT)){
                  return ;
              }
              include $filename;
          }
这个C方法为什么可以在这个else里面调用,在上面的if里面调用,或者在方面最顶部调用,都报Fatal error: Call to undefined function Think\C(),但是else里面的$namespace = C('AUTOLOAD_NAMESPACE'); 这里调用C方法为什么可以调用呢,当前命名空间是Think
最佳答案
评论( 相关
后面还有条评论,点击查看>>