loader.class.php 虽然下面module()方法还不太明白,但是大概知道 其他文件加载这个文件之后会
用load()->("文件名前缀"),加载framework下文件
<?php
/**
* [WeEngine System] Copyright (c) 2014 WE7.CC
* WeEngine is NOT a free software, it under the license terms, visited http://www.we7.cc/ for more details.
*/
defined('IN_IA') or exit('Access Denied');
//检测是否定义了IN_IA这个变量否则停止输出Access Denied
//本文件是在bootstrap.inc.php中加载的,bootstrap.inc.php中定义了这个变量,变相的验证在加载本文件之前是否加载了bootstrap.inc.php
function load() {
static $loader;//静态变量能直接访问
if(empty($loader)) {
$loader = new Loader();
}
return $loader;
}
class Loader {
//public 表示全局,类内部外部子类都可以访问;
//private表示私有的,只有本类内部可以使用;
//protected表示受保护的,只有本类或子类或父类中可以访问;
private $cache = array();
function func($name) {
global $_W;
if (isset($this->cache['func'][$name])) {
return true;//检测这个数组值是否存在
}
$file = IA_ROOT . '/framework/function/' . $name . '.func.php';
//file_exists检查文件是否存在 返回布尔值
if (file_exists($file)) {
include $file;
$this->cache['func'][$name] = true;
return true;
} else {
//报出一个错误
trigger_error('Invalid Helper Function /framework/function/' . $name . '.func.php', E_USER_ERROR);
//疑问 E_USER_ERROR 是在哪定义的变量
return false;
}
}
//下面几个函数和上面func类似是用load()->("文件名前缀")的方式加载framework下文件的方式
function model($name) {
global $_W;
if (isset($this->cache['model'][$name])) {
return true;
}
$file = IA_ROOT . '/framework/model/' . $name . '.mod.php';
if (file_exists($file)) {
include $file;
$this->cache['model'][$name] = true;
return true;
} else {
trigger_error('Invalid Model /framework/model/' . $name . '.mod.php', E_USER_ERROR);
return false;
}
}
function classs($name) {
global $_W;
if (isset($this->cache['class'][$name])) {
return true;
}
$file = IA_ROOT . '/framework/class/' . $name . '.class.php';
if (file_exists($file)) {
include $file;
$this->cache['class'][$name] = true;
return true;
} else {
trigger_error('Invalid Class /framework/class/' . $name . '.class.php', E_USER_ERROR);
return false;
}
}
function web($name) {
global $_W;
if (isset($this->cache['web'][$name])) {
return true;
}
$file = IA_ROOT . '/web/common/' . $name . '.func.php';
if (file_exists($file)) {
include $file;
$this->cache['web'][$name] = true;
return true;
} else {
trigger_error('Invalid Web Helper /web/common/' . $name . '.func.php', E_USER_ERROR);
return false;
}
}
function app($name) {
global $_W;
if (isset($this->cache['app'][$name])) {
return true;
}
$file = IA_ROOT . '/app/common/' . $name . '.func.php';
if (file_exists($file)) {
include $file;
$this->cache['app'][$name] = true;
return true;
} else {
trigger_error('Invalid App Function /app/common/' . $name . '.func.php', E_USER_ERROR);
return false;
}
}
function module($module, $file) {
if (isset($this->cache['encrypte'][$name])) {
return true;
}
//file_get_contents() 把整个文件内的所有读入一个字符串中。
//这里的$name哪来的
if (strexists(file_get_contents($name), '<?php')) {
$this->cache['encrypte'][$name] = true;
require $name;
} else {
//cache_load????
$key = cache_load('module:cloud:key:1');
$vars = cache_load('module:cloud:vars:1');
if (empty($vars)) {
trigger_error('Module is missing critical files , please reinstall');
}
//<<<Eof
//……
//Eof;
//1.PHP定界符的作用就是按照原样,包括换行格式什么的,输出在其内部的东西;
//2.在PHP定界符中的任何特殊字符都不需要转义;
//3.PHP定界符中的PHP变量会被正常的用其值来替换。
echo <<<EOF
\$_ENV = unserialize(base64_decode('$vars'));
EOF;
exit;
}
}
}