zoukankan      html  css  js  c++  java
  • PHP 自动加载类

    <?php
    
    /**
     * 自动加载类文件
     * author: zbseoag
     * QQ: 617937424
     *
    //自动加载类名以'Model' 开头的类, 加载:./lib/Model/*.class.php 文件
    Autoload::home('./lib/')->match('Model')->suffix('class.php')->register()
    $user = new ModelUser();
    echo Autoload::$file;
    
    //测试文件路径
    echo Autoload::home(__DIR__)->make('Mysql');
    
    //注册再手动加载一个试
    Autoload::home(__DIR__)->register()->load('Mysql');
    
     *
     */
    
    class Autoload {
        
        public static $init;
        public $suffix = 'php';
        public $home = './';
        public static $file = '';
        public $match = '';
    
        private function __construct($home = ''){
    
            //删除 home 两边的斜杠: ModelUser
            $this->home = trim($home, '\/');
        }
    
        /**
         * 文件根目录
         * @param $value
         * @return $this
         */
    
        public static function home($value = ''){
    
            if(!self::$init) self::$init = new static($value);
            return self::$init;
        }
    
    
        /**
         * 匹配命名空间
         * @param $value
         * @return $this
         */
        public function match($value){
    
            $this->match = trim($value, '\/');
            return $this;
        }
    
        /**
         * 类名文件后缀,如 'class.php'
         * @param $value
         * @return $this
         */
        public function suffix($value){
            
            $this->suffix = ltrim($value, '.');
            return $this;
        }
    
        public function register(){
            spl_autoload_register(function($class){
                $this->load($class);
            });
    
            return $this;
        }
    
        /**
         * 生成文件路径
         * @param $class
         * @return string
         */
        public function make($class){
    
            //删除 class 两边的斜杠: ModelUser
            $class = trim($class, '\');
    
            self::$file = '';
            if(empty($this->match) || strpos($class, $this->match) === 0){
                self::$file = strtr($this->home . '/' . $class, '\',  '/') . '.' . $this->suffix;
            }
    
            return $this;
    
        }
    
        /**
         * 手动加载
         * @param $class
         */
        public function load($class = ''){
    
            if(!empty($class)) $this->make($class);
    
            if(self::$file) require self::$file;
            return $this;
        }
    
        /**
         * 动态创建对象
         * @param $class
         * @param $arguments
         * @return object
         * @throws ReflectionException
         */
        public static function create($class, $arguments){
    
            $class = new ReflectionClass($class);
            return $class->newInstanceArgs($arguments);
        }
    
    
        public function functions(){
            return spl_autoload_functions();
        }
    
    
        
    }
    

      

  • 相关阅读:
    bzoj 4446: [Scoi2015]小凸玩密室【树形dp】
    bzoj 4403: 序列统计【lucas+组合数学】
    bzoj 3745: [Coci2015]Norma【分治】
    bzoj 3232: 圈地游戏【分数规划+最小割】
    Codeforces 1000 (A~E)
    bzoj 4753: [Jsoi2016]最佳团体【01分数规划+二分+树上背包】
    bzoj 3872: [Poi2014]Ant colony【树形dp+二分】
    bzoj 2067: [Poi2004]SZN【贪心+二分+树形dp】
    洛谷 P1314 聪明的质监员【二分+前缀和】
    bzoj 4622: [NOI 2003] 智破连环阵【dfs+匈牙利算法】
  • 原文地址:https://www.cnblogs.com/zbseoag/p/12717214.html
Copyright © 2011-2022 走看看