加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

[PHP] 项目实践中的自动加载实现

发布时间:2021-05-21 06:51:41 所属栏目:大数据 来源: https://www.jb51.cc
导读:1.使用spl_autoload_register函数注册一个自己定义的自动加载函数 2.当在代码中new一个不存在的类的时候,上面的函数会被调用,不存在的类名会被作为参数传入该函数中 3.兼容了两种方式,命名空间对应目录的方式 apptest,类名下划线分割对应目录的方式app_tes

1.使用spl_autoload_register函数注册一个自己定义的自动加载函数
2.当在代码中new一个不存在的类的时候,上面的函数会被调用,不存在的类名会被作为参数传入该函数中
3.兼容了两种方式,命名空间对应目录的方式 apptest,类名下划线分割对应目录的方式app_test,都是对应的app目录下的test.PHP文件,类名要和文件名一致
4.set_include_path(),可以有多个用冒号:隔开,动态设置PHP.ini中的include_path 配置选项

?

<?PHP
class Application {
    private static $instance    = null;
    private $libPath            = './'$PHPExt             = '.PHP'public function setLibPath($path,$autoload = false) {
        $this->libPath = trim(trim($path), DIRECTORY_SEPARATOR);
        set_include_path($this->getLibPath());
        if ($autoload) {
            spl_autoload_register(array('Application','load'));
        }
        return $this;
    }
    static function instance() {
        if (!self::$instance) {
            self::$instance = new self();
        }
        return self:://获取文件后缀
     getPHPExt() {
        PHPExt;
    }
    设置文件后缀
    function setPHPExt($ext$this->PHPExt = ;
        设置根路径
    function setPath($path$this->path = rtrim(设置自动加载的路径
     getLibPath() {
        $this->path . DIRECTORY_SEPARATOR . libPath;
    }
    自动加载函数
    function load($class$pos = strrpos($class,'');
        $pos !== ) {
            $ns = str_replace('',DIRECTORY_SEPARATOR,1)">substr($pos + 1));
            $className = );
        } else {
            $ns = DIRECTORY_SEPARATOR;
            $className = ;
        }
        if (strpos($className,'_') !== str_replace('_',1)">$className);
        }        
        $ins = self::instance();
        $classFile = $ins->getLibPath() . $ns . $className . $ins->getPHPExt();
        if (!(include $classFile)) {
            throw new Exception('load class Failed: class=' . $class . ' file=' . );
        }
    }
}
Application::instance()->setPath(dirname(__FILE__))->setLibPath(DIRECTORY_SEPARATOR,1)">true);
测试,在根目录创建app目录,下面创建这两个文件
 app_user();
new appadmin();

app目录下面的user.PHP

<? app_user{
     __construct(){
         appadmin();
    }
}

app目录下的admin.PHP

<?PHP
namespace app;
class admin{}

?

(编辑:北几岛)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读