/** * @copyright (C)2016-2099 Hnaoyun Inc. * @author XingMeng * @email hnxsh@foxmail.com * @date 2017年11月4日 * 系統基礎類 */ namespace core\basic; class Basic { protected static $models = array(); // 實現類文件自動加載 public static function autoLoad($className) { if (substr($className, 0, 4) == 'core') { // 框架類文件命名空間轉換 $class_file = CORE_PATH . '/' . str_replace('\\', '/', substr($className, 5)) . '.php'; } elseif (substr($className, 0, 3) == 'app') { // 應用類文件命名空間轉換 $class_file = APP_PATH . '/' . str_replace('\\', '/', substr($className, 4)) . '.php'; } elseif (strpos($className, '\\')) { // 如果帶有命名空間,使用全路徑載入 $class_file = ROOT_PATH . '/' . str_replace('\\', '/', $className) . '.php'; } else { // 默認載入內核基礎目錄下文件 $class_file = CORE_PATH . '/basic/' . $className . '.php'; } if (! file_exists($class_file)) { error('自動加載類文件時發生錯誤,類名【' . $className . '】,文件:【' . $class_file . '】'); } require $class_file; } // 自定義錯誤函數 public static function errorHandler($errno, $errstr, $errfile, $errline) { if (! (error_reporting() & $errno)) { // 如果這個錯誤類型沒有包含在error_reporting里,如加了@的錯誤則不報告 return; } switch ($errno) { case E_ERROR: $err_level = 'ERROR'; break; case E_WARNING: $err_level = 'WARNING'; break; case E_PARSE: $err_level = 'PARSE'; break; case E_NOTICE: $err_level = 'NOTICE'; break; case E_RECOVERABLE_ERROR: case E_CORE_ERROR: case E_COMPILE_ERROR: case E_USER_ERROR: $err_level = 'FATAL ERROR'; break; default: $err_level = 'UNKNOW'; break; } $info = "

$err_level:

\n"; $info .= "

Code: $errno;

\n"; $info .= "

Desc: $errstr;

\n"; $info .= "

File: $errfile;

\n"; $info .= "

Line: $errline;

\n"; if ($err_level == 'WARNING' || $err_level == 'NOTICE') { echo $info; } else { error($info); } } // 異常捕獲 public static function exceptionHandler($exception) { error("程序運行異常: " . $exception->getMessage() . ",位置:" . $exception->getFile() . ',第' . $exception->getLine() . '行。'); } // 致命錯誤捕獲 public static function shutdownFunction() { $error = error_get_last(); define('E_FATAL', E_ERROR | E_RECOVERABLE_ERROR | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR); if ($error && ($error["type"] === ($error["type"] & E_FATAL))) { $errno = $error["type"]; $errstr = $error["message"]; $errfile = $error["file"]; $errline = $error["line"]; self::errorHandler($errno, $errstr, $errfile, $errline); } } // 會話處理程序設置 public static function setSessionHandler() { if (ini_get('session.auto_start')) { return; } // 配置會話安全參數 session_name('PbootSystem'); ini_set("session.use_trans_sid", 0); ini_set("session.use_cookies", 1); ini_set("session.use_only_cookies", 1); session_set_cookie_params(0, SITE_DIR . '/', null, null, true); switch (Config::get('session.handler')) { case 'memcache': if (! extension_loaded('memcache')) error('PHP運行環境未安裝memcache.dll擴展!'); ini_set("session.save_handler", "memcache"); ini_set("session.save_path", Config::get('seesion.path')); break; default: if (Config::get('session_in_sitepath')) { $save_path = RUN_PATH . '/session/'; if (! check_dir($save_path, true)) error('設置的會話目錄創建失!' . $save_path); ini_set("session.save_handler", "files"); $depth = 1; ini_set("session.save_path", $depth . ';' . $save_path); if (! is_dir($save_path . '/0/0') || ! is_dir($save_path . '/v/v')) { create_session_dir($save_path, $depth); } } break; } } // 實例化模型 public static function createModel($name = null, $new = false) { // 自動同名模型控制器 if (! $name) $name = C; // 獲取類名 if (strpos($name, '.') !== false) { $path = explode('.', $name); $class_name = '\\app\\' . $path[0] . '\\model'; $len = count($path); for ($i = 1; $i < $len - 1; $i ++) { $class_name .= '\\' . $path[$i]; } $class_name .= '\\' . ucfirst($path[$i]) . 'Model'; } else { $class_name = '\\app\\' . M . '\\model\\' . ucfirst($name) . 'Model'; } // 根據需要實例化 $key = md5($class_name); if (! isset(self::$models[$key]) || $new) { self::$models[$key] = new $class_name(); } return self::$models[$key]; } // 創建數據接口 public static function createApi($args = null) { // 直接調用方式 if (! is_array($args)) { $args = func_get_args(); } // 分離參數 $name = $args[0]; unset($args[0]); $param = $args; // 如果只是傳遞了方法,則自動完善模塊及模型控制器 if (strpos($name, '.') === false) { $name = M . '.' . C . '.' . $name; } $path = explode('.', $name); // 第一個為模塊 $path[0],倒數第二個為模型$path[$i],倒數第一個為方法$path[$i+1] $class_name = '\\app\\' . $path[0] . '\\model'; $len = count($path); for ($i = 1; $i < $len - 2; $i ++) { $class_name .= '\\' . $path[$i]; } $class_name .= '\\' . ucfirst($path[$i]) . 'Model'; $key = md5($class_name); if (isset(self::$models[$key])) { $model = self::$models[$key]; } else { $model = new $class_name(); self::$models[$key] = $model; } // 調取接口方法 if (is_array($param)) { $rs = call_user_func_array(array( $model, $path[$i + 1] ), $param); } // 返回結果,如果不是json數據,則轉換 if (! ! $return = json_decode($rs)) { return $rs; } else { return json_encode($rs); } } }
      <td id="cdv5u"><option id="cdv5u"></option></td>

      <p id="cdv5u"></p>
    1. <table id="cdv5u"><option id="cdv5u"></option></table>
        
        
        <table id="cdv5u"></table>

        <table id="cdv5u"></table>

        国产日韩在线观看,美日韩一区二区三区,亚洲一区在线精品,亚洲综合婷婷网