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();
        }
    
    
        
    }
    

      

  • 相关阅读:
    自动添加控件,一次提交多条记录。
    Asp.Net 2.0 的 Master Page(母版页)
    vs2008中文版提供下载(包含中文msdn),包括vs2008序列号和破解方法。
    C# 2.0 :仿MSN提示框or仿迅雷提示框(.Net2.0).rar
    httpanalyzer 结合 HttpWebRequest Post的运用
    xp访问权限问题的解决(绝对有效)
    Request.params、Request、Request.querystring、Request.Form 具体区别!
    C# List<> 泛型中遍历不同类型
    备份与恢复数据库的存储过程
    .Net 生成不重复的随机数
  • 原文地址:https://www.cnblogs.com/zbseoag/p/12717214.html
Copyright © 2011-2022 走看看