我的简单PHP框架——LabPHP v1.0.1
2016-07-08 09:47
906 查看
此前讲到 我做的一个基于MVC设计思想的简单PHP框架(我的简单PHP框架——LabPHP),这里对其进行一些改进,改进地方如下:
1、对 LabPHP/Common/functions.php 中的 M 方法进行修改,方法中实例化一个没有模型文件的Model;
2、在 LabPHP/Common/functions.php 中增加 D 方法,D方法实现实例化模型类(具有模型文件的Model对象);
3、在 LabPHP/Common/functions.php 中加入一个简单的 dump 方法,提供友好输出变量的方法;
4、在 LabPHP/LabPHP.php 增加引入用户当前模块下自定义的 function.php 文件的功能,在各个模块(如:Home、Admin)下增加 Common文件夹,在Common 文件夹下添加 function.php;
5、在 LabPHP/LabPHP.php 增加引入用户所有模块公共的自定义的 function.php 文件的功能,在 Application 文件夹下增加 Common文件夹,在Common 文件夹下再增加Common文件夹,在最后新增的Common文件夹下添加 function.php。
LabPHP框架修改后,项目目录结构基本如下:
LabPHP/Common/functions.php 修改如下:
<?php
//防止非法字符的输入
function daddslashes($str) {
return (!get_magic_quotes_gpc())?addslashes($str):$str;
}
/**
* 浏览器友好的变量输出
* @param [type] $var 变量
* @return [type] [description]
*/
function dump($var) {
echo '<pre>';
var_dump($var);
echo '</pre>';
}
/**
* 获得当前被访问的模块名
* @return [type] 当前模块名
*/
function getModuleName() {
return isset($_GET['m']) ? daddslashes($_GET['m']) : 'Home'; //初始化模块(默认Home模块)
}
/**
* 获得当前被访问的控制器名
* @return [type] 当前控制器名
*/
function getControllerName() {
return isset($_GET['c']) ? daddslashes($_GET['c']) : 'Index'; //初始化控制器
}
/**
* 获得当前被访问的操作名
* @return [type] 当前操作名
*/
function getActionName() {
return isset($_GET['a']) ? daddslashes($_GET['a']) : 'index'; //初始化操作
}
function getConfig() {
$c1 = include('./LabPHP/Conf/convention.php');
$c2 = include('./Application/' . MODULE_NAME . '/Config/config.php');
$config = array_merge($c1, $c2);
return $config;
}
/**
* 用于调用 $name 控制器的 $method 方法
* @param [type] $name 控制器名
* @param [type] $method 方法名
*/
function C($name, $method) {
$m = getModuleName();
require_once('./Application/' . $m . '/Controller/' . $name . 'Controller.class.php');
$c = $name . 'Controller';
$ct = new $c();
$ct->$method();
}
/**
* 实例化一个没有模型文件的Model
* @param [type] $name Model名称
*/
function M($name = '') {
$obj = new Model();
return $obj;
}
/**
* 实例化模型类
* @param [type] $name 模型类的名,如IndexModel,则 $name = 'Index'
*/
function D($name) {
if(!isset($name) || empty($name)) {
return null;
}
$obj = new Model();
// 如果不存在具有模型文件(xxxModel.class.php)的Model,就返回 new Model() 对象
$m = getModuleName();
$file_model_path = './Application/' . $m . '/Model/' . $name . 'Model.class.php';
if(file_exists($file_model_path)) {
require_once($file_model_path);
$model = $name.'Model';
$obj = new $model();
}
return $obj;
}
?>
LabPHP/LabPHP.php 修改如下:
1、对 LabPHP/Common/functions.php 中的 M 方法进行修改,方法中实例化一个没有模型文件的Model;
2、在 LabPHP/Common/functions.php 中增加 D 方法,D方法实现实例化模型类(具有模型文件的Model对象);
3、在 LabPHP/Common/functions.php 中加入一个简单的 dump 方法,提供友好输出变量的方法;
4、在 LabPHP/LabPHP.php 增加引入用户当前模块下自定义的 function.php 文件的功能,在各个模块(如:Home、Admin)下增加 Common文件夹,在Common 文件夹下添加 function.php;
5、在 LabPHP/LabPHP.php 增加引入用户所有模块公共的自定义的 function.php 文件的功能,在 Application 文件夹下增加 Common文件夹,在Common 文件夹下再增加Common文件夹,在最后新增的Common文件夹下添加 function.php。
LabPHP框架修改后,项目目录结构基本如下:
LabPHP/Common/functions.php 修改如下:
<?php
//防止非法字符的输入
function daddslashes($str) {
return (!get_magic_quotes_gpc())?addslashes($str):$str;
}
/**
* 浏览器友好的变量输出
* @param [type] $var 变量
* @return [type] [description]
*/
function dump($var) {
echo '<pre>';
var_dump($var);
echo '</pre>';
}
/**
* 获得当前被访问的模块名
* @return [type] 当前模块名
*/
function getModuleName() {
return isset($_GET['m']) ? daddslashes($_GET['m']) : 'Home'; //初始化模块(默认Home模块)
}
/**
* 获得当前被访问的控制器名
* @return [type] 当前控制器名
*/
function getControllerName() {
return isset($_GET['c']) ? daddslashes($_GET['c']) : 'Index'; //初始化控制器
}
/**
* 获得当前被访问的操作名
* @return [type] 当前操作名
*/
function getActionName() {
return isset($_GET['a']) ? daddslashes($_GET['a']) : 'index'; //初始化操作
}
function getConfig() {
$c1 = include('./LabPHP/Conf/convention.php');
$c2 = include('./Application/' . MODULE_NAME . '/Config/config.php');
$config = array_merge($c1, $c2);
return $config;
}
/**
* 用于调用 $name 控制器的 $method 方法
* @param [type] $name 控制器名
* @param [type] $method 方法名
*/
function C($name, $method) {
$m = getModuleName();
require_once('./Application/' . $m . '/Controller/' . $name . 'Controller.class.php');
$c = $name . 'Controller';
$ct = new $c();
$ct->$method();
}
/**
* 实例化一个没有模型文件的Model
* @param [type] $name Model名称
*/
function M($name = '') {
$obj = new Model();
return $obj;
}
/**
* 实例化模型类
* @param [type] $name 模型类的名,如IndexModel,则 $name = 'Index'
*/
function D($name) {
if(!isset($name) || empty($name)) {
return null;
}
$obj = new Model();
// 如果不存在具有模型文件(xxxModel.class.php)的Model,就返回 new Model() 对象
$m = getModuleName();
$file_model_path = './Application/' . $m . '/Model/' . $name . 'Model.class.php';
if(file_exists($file_model_path)) {
require_once($file_model_path);
$model = $name.'Model';
$obj = new $model();
}
return $obj;
}
?>
LabPHP/LabPHP.php 修改如下:
<?php // +---------------------------------------------------------------------- // | LabPHP v1.0.1 // +---------------------------------------------------------------------- // | Author: DreamBoy <937921168@qq.com> // +---------------------------------------------------------------------- //定义应用的模式——是否为调试模式 if(!defined('APP_DEBUG') || APP_DEBUG == false) { error_reporting(0); } //启动引擎 $currentdir = dirname(__FILE__); //首先include文件清单 include_once $currentdir . '/Conf/include.list.php'; //include必要的文件 foreach ($paths as $value) { include_once $currentdir . '/' . $value; } // 导入用户自定义的模块公共的 function.php 文件 $user_c_func = './Application/Common/Common/function.php'; if(file_exists($user_c_func)) { include_once $user_c_func; } // 导入用户自定义的针对某一模块的 function.php 文件 $user_m_func = './Application/' . getModuleName() . '/Common/function.php'; if(file_exists($user_m_func)) { include_once $user_m_func; } //定义当前被访问的模块 defined('MODULE_NAME') or define('MODULE_NAME', getModuleName()); //定义当前被访问的控制器 defined('CONTROLLER_NAME') or define('CONTROLLER_NAME', getControllerName()); //定义当前被访问的操作 defined('ACTION_NAME') or define('ACTION_NAME', getActionName()); LabPHP::start(); ?>
相关文章推荐
- 一个关于if else容易迷惑的问题
- PHP5.2.*防止Hash冲突拒绝服务攻击的Patch
- 深入理解PHP之匿名函数
- JSP/PHP基于Ajax的分页功能实现
- 关于PHP通过PDO用中文条件查询MySQL的问题。
- 什么是设计模式
- PHP数据库长连接mysql_pconnect的细节
- Php Installing An Expansion
- rem : web app适配的秘密武器
- jquery高级应用之Deferred对象
- 关于浮动与清除浮动,你应该知道的
- php7 读取php.ini[4]
- 插件管理框架 for Delphi(一)
- PHP+Apache在Windows 9x下的安装和配置
- IIS 6 的 PHP 最佳配置方法
- 安装Apache和PHP的一些补充
- Linux Apache+MySQL+PHP
- 建立Apache+PHP+MySQL数据库驱动的动态网站