day14
日志函数的编写与理解 在Core文件夹下建立Log.class.php
<?php
class Log{
static public function write($msg,$level='ERROR',$type=3,$dest=NULL){
if (!C('SAVE_LOG')) return;
if (is_null($dest)){
$dest = LOG_PATH . '/' . date('Y_m_d'). ".log";
}
if (is_dir(LOG_PATH)) error_log("[TIME]:" .date('Y-m-d H:i:s')."{$level}:{msg}\r\n",$type,$dest);
}
}
?>
配置Config.php文件加入日志开启的参数
'SAVE_LOG' => true,
1.定义路径 临时目录存放
define('TEMP_PATH',ROOT_PATH . '/Temp');
define('LOG_PATH',TEMP_PATH.'/Log');
2.创建目录数组中添加他们
private static function _create_dir(){
$arr = array(
APP_PATH,
APP_CONFIG_PATH,
APP_CONTROLLER_PATH,
APP_TPL_PATH,
APP_PUBLIC_PATH,
TEMP_PATH,
LOG_PATH
);
3.error_log函数写入报错信息 如果在目录下存在log文件,那么写入日志报错信息\r\n。
4.最后载入类文件
private static function _import_file(){
$fileArr = array(
CORE_PATH . '/Log.class.php',
FUNCTION_PATH . '/function.php',
CORE_PATH . '/Controller.class.php',
CORE_PATH . '/Application.class.php'
);
第一阶段
定义核心类
定义单入口,创建所需要的文件夹。 在KUAIXUEPHP下创建index.php 里面载入单入口
<?php
require "./KUAIXUEAPP/KUAIXUEAPP.php";
?>
定义核心类KUAIXUEPHP.php 1.设置常量 2.创建目录 3.载入必须的文件 4.执行应用类
<?php
final class KUAIXUEPHP{
public static function run(){
1.设置常量 self::_set_const();
2.创建目录 self::_create_dir();
3.载入必须的文件 self::_import_file();
4.执行应用类 Application::run();
}
private static function _set_const(){
$path = str_replace('\\','/',__FILE__);
define('KUAIXUEPHP_PATH',dirname($path));
define('CONFIG_PATH',KUAIXUEPHP_PATH. '/Config');
define('DATA_PATH',KUAIXUEPHP_PATH. '/Data');
define('TPL_PATH',DATA_PATH.'/Tpl');
define('LIB_PATH',KUAIXUEPHP_PATH. '/Lib');
define('CORE_PATH',LIB_PATH. '/Core');
define('FUNCTION_PATH',LIB_PATH. '/Function');
define('ROOT_PATH',dirname(KUAIXUEPHP_PATH));
define('TEMP_PATH',ROOT_PATH . '/Temp');
define('LOG_PATH',TEMP_PATH.'/Log');
define('APP_PATH',ROOT_PATH. '/'. APP_NAME);
define('APP_CONFIG_PATH',APP_PATH.'/Config');
define('APP_CONTROLLER_PATH',APP_PATH.'/Controller');
define('APP_TPL_PATH',APP_PATH.'/Tpl');
define('APP_PUBLIC_PATH',APP_TPL_PATH.'/Public');
define('KUAIXUEPHP_VERSION','1.0');
}
private static function _create_dir(){
$arr = array(
APP_PATH,
APP_CONFIG_PATH,
APP_CONTROLLER_PATH,
APP_TPL_PATH,
APP_PUBLIC_PATH,
TEMP_PATH,
LOG_PATH
);
foreach ($arr as $v){
is_dir($v) || mkdir($v,0777,true);
}
private static function _import_file(){
$fileArr = array(
CORE_PATH . '/Log.class.php',
FUNCTION_PATH . '/function.php',
CORE_PATH . '/Controller.class.php',
CORE_PATH . '/Application.class.php'
);
foreach ($fileArr as $v){
require_once $v;
}
}
}
KUAIXUEPHP::run();
?>
设置index.php和admin.php两个不同的模式,用户和管理员
admin.php
<?php
define('APP_NAME','Admin');
require "./KUAIXUEAPP/KUAIXUEAPP.php";
index.php
define('APP_NAME','Index');
require "./KUAIXUEAPP/KUAIXUEAPP.php";
APP_NAME分别对应不同的路径,当访问前台时会自动创建。
4.执行应用类
在/Lib/Core目录下创建Application.class.php 在Function目录下创建function.php
final class Application{
public static function run(){
p(1);
}
}
<?php
function p($arr){
echo ' <pre>';
print_r($arr);
echo '</pre>';
通过加载文件来执行函数,利用框架的扩展性。
初始化框架准备之C函数
建立框架的Config.php,返回数组
<?php
return array(
'CODE_LEN' => 4,
'DEFAULT_TIME_ZONE' => 'PRC',
'SESSION_AUTO_START' => true,
'VAR_CONTROLLER' => 'c',
'VAR_ACTION' => 'a',
'SAVE_LOG' => true,
'ERROR_URL' =>'',
'ERROR_MSG' => '网站出错了请稍后再试'
);
建立用户Config,自动建。 核心函数c函数 1.加载配置项Config 2.读取配置项 3.临时动态改变配置项 4.读取所有配置项。
function C($var = NULL , $value = NULL){
static $config = array();
if (is_array($var)){
$config = array_merge($config,array_change_key_case($var,CASE_UPPER)
);
return;
}
if (is_string($var)){
$var = strtoupper($var);
if(!is_null($value)){
$config[$var] = $value;
return;
}
return isset($config[$var])? $config[$var]:NULL;
}
if (is_null($var) && is_null($value)){
return $config;
}
}
初始化框架之加载配置项与时区 重新改写Application.class.php
final class Application{
public static function run(){
self::_init();
self::_set_url();
spl_autoload_register(array(__CLASS__,'_autoload'));
self::_create_demo();
self::_app_run();
}
private static function _init(){
C(include CONFIG_PATH . '/config.php');
$userPath = CONFIG_INDEX_PATH . '/config.php';
$userConfig = <<<str
<?php
return array(
//配置项 => 配置值
);
?>
str;
is_file($userPath) || file_put_contents($userPath, $userConfig);
C(include $userPath);
date_default_timezone_set(C('DEFAULT_TIME_ZONE'));
C('SESSSION_AUTO_START') && session_start();
}
private static function _set_url(){
$path = 'http://' . $_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME'];
$path = str_replace('\\','/',$path);
define('__APP__',$path);
define('__ROOT__',dirname(__APP__));
define('__TPL__',__ROOT__ . '/' . APP_NAME . '/Tpl');
define('__PUBLIC__',__TPL__.'/Public');
}
private static function _create_demo(){
$path = APP_CONTROLLER_PATH . '/IndexController.class.php';
$str = <<<str
<?php
class IndexController extends Controller{
public function index(){
header('Content-type:text/html;charset=utf-8');
echo '欢迎使用凌云框架(:';
}
}
str;
is_file($path) || file_put_contents($path,$str);
}
private static function _app_run(){
$c = isset($_GET[C('VAR_CONTROLLER')])? $_GET[C('VAR_CONTROLLER')] : 'Index';
$a = isset($_GET[C('VAR_ACTION')])? $_GET[C('VAR_ACTION')] : 'index';
$c .='Controller';
$obj = new $c();
$obj->$a();
}
}
day10 通过get参数来实现控制类
self::_app_run();
private static function _app_run(){
$c = isset($_GET[C('VAR_CONTROLLER')])? $_GET[C('VAR_CONTROLLER')] : 'Index';
$a = isset($_GET[C('VAR_ACTION')])? $_GET[C('VAR_ACTION')] : 'index';
$c .='Controller';
$obj = new $c();
$obj->$a();
}
相当于调用不同的控制器,比如说我传入参数c=Arc
事实上我们通过控制器来操作不同的类。思想很简单. 在config.php中添加变量c和a
|