打造属于直接的php框架:
第一步创建目录:
Admin 项目目录
Index.php 入口文件
App程序入口 Action © Model (M) View (V)
Config 配置文件
Log 框架日志目录
Resource 资源目录(img、 css、 js等)
目录结构
index.php代码展示
<?php
header("Content-type:text/html;charset=utf-8"); //设置框架编码
ini_set("date.timezone","Asia/Shanghai");//设置 时间区域
const APP_PATH = __DIR__ . '/';//定义我们的项 目路径常量
const Lib = '../PHPmm/';//定义我们的框架目录常量
const Resource = APP_PATH . 'Resource';//定义 我们的项目资源目录常量
ini_set('display_errors',1);//是否抛出错误
/**
display_errors介绍:错误回显,一般常用语开发 模式,但是很多应用在正式环境中也忘记了关闭 此选项。错误回显可以暴露出非常多的敏感信息, 为攻击者下一步攻击提供便利。推荐关闭此选项。 display_errors = On 开启状原南,若出现错误, 则报错,出现错误提示 dispaly_errors = Off 关闭 状态下,若出现错误,则提示:服务器错误。但 是不会出现错误提示**/
require Lib.'PHPmm.php';
//运行框架行为
$app =new PHPmm();
$app->run();
$app =null;
PHPmm/PHPmm.php代码展示
class PHPmm
{
//框架运行方法
public function run()
{
echo 11;
}
}
创建php自动加载类:
前景了解
在编写面向对象(O0P)程序时,很多开发者为 每个类新建一个 PHP 文件。这会带来一个烦恼: 每个脚本的开头,都需要包含(include)一个长 长的列表(每个类都有个文件)。在 PHP 5中, 已经不再需要这了。splautoload_register() 函 数可以注册任意数量的自动加载器,当使用尚未 被定义的类 (class)和接口(interface)时自动 去加载。通过注册自动加载器,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类。
参考:php自动加载类使用
框架控制器编写Controller:
目录结构
PHPmm.php代码展示
<?php
class PHPmm
{
//框架运行方法
public function run()
{
spl_autoload_register(array($this, 'load'));
$url = $_SERVER['REQUEST_URI'];
$_arr = explode('/', $url);
$action = ucfirst($_arr[1]) . 'Action';
if ($url == '/') {
$action = 'IndexAction';
}
$actionObj = new $action();
$objClass = isset($_arr[2]) ? $_arr[2] : 'index';
$actionObj->$objClass();
}
private function load($className)
{
if ($className == 'Action') {
require Lib . '/core/' . $className . '.php';
}
if (strpos($className, 'Action') != false) {
$_str = str_replace('Action', '', $className);
require_once APP_PATH . 'App/Action/' . $_str . 'Action.php';
}
}
}
.htaccess的代码展示
<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine On #开启rewriteEngine
#!-d的意思是不是目录或目录不存在
RewriteCond %{REQUEST_FILENAME} !-d
#!-f的意思是不是文件或文件不存在
RewriteCond %{REQUEST_FILENAME} !-f
#转给index.php处理
#^(.*)$-匹配所有的路径映射到入口文件 index.php/$1($1为变量1)
#[QSA]-表示保留参数如get传值?xxx==xx...;
#[PT]-再把这个URL交给Apache处理;
#[L]-这是最后一个匹配项,不再往下匹配
RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
#增加如下内容
SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0
</IfModule>