class core.php,【Discuz系列教程3】核心函数class_core.php

error_reporting(E_ALL); //设置error级别为报告所有错误

//定义常量值

define('IN_DISCUZ', true); //设置常量IN_DISCUZ为true,为后面的页面验证

//获取根目录dirname(__FILE__)=/bbs/source/class,用substr函数后退12个字符得到/bbs/根目录

//dirname(__FILE__);得到的是文件所在层目录名

define('DISCUZ_ROOT', substr(dirname(__FILE__), 0,

-12));

//设置debug为false,现在还不知道啥意思

//define('DISCUZ_CORE_DEBUG', false);

define('DISCUZ_CORE_DEBUG', true);

//用户自定义未捕获异常处理函数为core类中的handleException方法函数

//就是如果有的异常没有对应的异常处理函数捕获,则由core类中的handleException方法处理

set_exception_handler(array('core', 'handleException'));

//如果debug模式为true,设置未捕获的error处理函数及注册关闭函数为core类中的对应函数

if(DISCUZ_CORE_DEBUG) {

set_error_handler(array('core', 'handleError'));

register_shutdown_function(array('core',

'handleShutdown'));

}

//如果存在函数spl_autoload_register,则由spl_autoload_register实现自动加载类,否则调用__autoload函数实现自动加载类

//都是调用core::autoload方法实现类的加载

if(function_exists('spl_autoload_register')) {

spl_autoload_register(array('core', 'autoload'));

} else {

function __autoload($class) {

return core::autoload($class);

}

}

//创建discuz_application类实例赋给$_app对象

C::creatapp();

class core

{

private static $_tables;

private static $_imports;

private static $_app;

private static $_memory;

//通过静态方法调用,返回静态方法所属类的成员对象

public static function app() {

return self::$_app;

}

//实例化对象$_app,将discuz_application实例化赋值给$_app

public static function creatapp() {

if(!is_object(self::$_app)) {

self::$_app = discuz_application::instance();

}

return self::$_app;

}

//C::t 方法的实现:通过 C::t 方法来调用数据层对应表的对象来实现对数据的操作

public static function t($name) {

$pluginid = null;

if($name[0] === '#') {

list(, $pluginid, $name) = explode('#', $name);

}

$classname = 'table_'.$name;

if(!isset(self::$_tables[$classname])) {

if(!class_exists($classname, false)) {

self::import(($pluginid ? 'plugin/'.$pluginid :

'class').'/table/'.$name);

}

self::$_tables[$classname] = new $classname;

}

return self::$_tables[$classname];

}

//memory 的初始化:主要由 discuz_memory 类来实现

public static function memory() {

if(!self::$_memory) {

self::$_memory = new discuz_memory();

self::$_memory->init(self::app()->config['memory']);

}

return self::$_memory;

}

//引入所需的文件,include

public static function import($name, $folder = '', $force =

true) {

$key = $folder.$name;

if(!isset(self::$_imports[$key])) {

$path = DISCUZ_ROOT.'/source/'.$folder;

if(strpos($name, '/') !== false) {

$pre = basename(dirname($name));

$filename =

dirname($name).'/'.$pre.'_'.basename($name).'.php';

} else {

$filename = $name.'.php';

}

if(is_file($path.'/'.$filename)) {

self::$_imports[$key] = true;

return include $path.'/'.$filename;

} elseif(!$force) {

return false;

} else {

throw new Exception('Oops! System file lost:

'.$filename);

}

}

return true;

}

//异常处理

public static function handleException($exception) {

discuz_error::exception_error($exception);

}

//error处理

public static function handleError($errno, $errstr, $errfile,

$errline) {

if($errno & DISCUZ_CORE_DEBUG) {

discuz_error::system_error($errstr, false, true, false);

}

}

//关闭处理

public static function handleShutdown() {

if(($error = error_get_last()) && $error['type'] &

DISCUZ_CORE_DEBUG) {

discuz_error::system_error($error['message'], false, true,

false);

}

}

//自动加载类的方法

public static function autoload($class) {

$class = strtolower($class);

if(strpos($class, '_') !== false) {

list($folder) = explode('_', $class);

$file = 'class/'.$folder.'/'.substr($class, strlen($folder) +

1);

} else {

$file = 'class/'.$class;

}

try {

self::import($file);

return true;

} catch (Exception $exc) {

$trace = $exc->getTrace();

foreach ($trace as $log) {

if(empty($log['class']) && $log['function'] ==

'class_exists') {

return false;

}

}

discuz_error::exception_error($exc);

}

}

}

//为类core和discuz_database设置简写

class C extends core {}

class DB extends discuz_database {}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值