路由方法的设置

//路由方法
private static function dispatch(){
//获取控制器名称(类比:英文单词的后缀)
$controller_name=CONTROLLER."Controller";
//获取方法名

$action_name=ACION."Action";

//实例化控制器对象
$controller=new $controller_name();
//调用方法
$controller->$action_name();

}

实现自动加载

自动加载联想到__autoload

面试题:__autoload是函数还是方法?

波利亚《怎样解题表》提出“回到定义中去”

函数的定义:普通函数,function来定义

方法的定义:类中定义的函数,和类挂钩。

即使在类中定义方法名字为__autoload,它也不能起到自动加载的作用

解决方案

1.写在类的外面

2.在类中实现

1) 写一个方法实现自动加载,如下:

//自动加载
private static function __autoload(){

}
//自动加载功能,实现控制器和数据库模型
//GoodsController GoodsModel
private static function load($classname){
if(substr($classname,-10)=="Controller"){

include CUR_CONTROLLER_PATH."{$classname}.class.php";
}elseif (substr($classname, -5)=='Model'){
//载入数据库模型
include MODEL_PATH."{$classname}.class.php";
}else{

}

}

第二步   类中注册方法

//自动加载功能,实现控制器和数据库模型
//GoodsController GoodsModel
private static function load($classname){
if(substr($classname,-10)=="Controller"){

include CUR_CONTROLLER_PATH."{$classname}.class.php";
}elseif (substr($classname, -5)=='Model'){
//载入数据库模型
include MODEL_PATH."{$classname}.class.php";
}else{

}

}

2)

//注册为自动加载
private static function autoload(){
$arr=array(__CLASS__,'load');
//__CLASS__获取当前的类名
spl_autoload_register($arr);

}

3)在run中调用

public static function run(){
//echo "hello,wrold!";
self::init();
self::autoload();
self::dispatch();

}

4)写一个控制器进行测试

代码如下:

<?php
//后台首页控制器
class IndexController{

public function indexAction(){

echo "admin....index...";

}

}

?>

输出结果如下:

http://localhost:8989/shopcz1/index.php

代表成功

整体代码如下:

Framework.class.php

<?php
//核心启动类
class Framework{
public static function run(){
//echo "hello,wrold!";
self::init();
self::autoload();
self::dispatch();

}
//初始化方法
private static function init(){

//定义路径常量
define("DS",DIRECTORY_SEPARATOR);
define("ROOT",getcwd().'/');
define("APP_PATH",ROOT.'application'.DS);
define("FRAMEWORK_PATH",ROOT.'framework'.DS);
define("PUBLIC_PATH",ROOT.'public'.DS);
define("GONFIG_PATH",APP_PATH."config".DS);
define("CONTROLLER_PATH",APP_PATH."controllers".DS);
define("MODEL_PATH",APP_PATH."models".DS);
define("VIEW_PATH",APP_PATH.'views'.DS);
define("CORE_PATH",FRAMEWORK_PATH.'core'.DS);
define("DB_PATH",FRAMEWORK_PATH.'databases'.DS);
define("LIB_PATH",FRAMEWORK_PATH.'libraries'.DS);
define("HELPER_PATH",FRAMEWORK_PATH.helpers);
define("UPLOAD_PATH",PUBLIC_PATH.'uploads'.DS);
//获取参数p ,c,a
define('PLATFORM', isset($_GET['p'])?$_GET['p']:"admin");
define('CONTROLLER',isset($_GET['c'])?ucfirst($_GET['c']):"Index");
define('ACTION',isset($_GET['a'])?$_GET['a']:"index");
//设置当前控制器和视图
define("CUR_CONTROLLER_PATH",CONTROLLER_PATH.PLATFORM.DS);
define("CUR_VIEW_PATH",VIEW_PATH.PLATFORM.DS);

}
//路由方法
private static function dispatch(){
//获取控制器名称
$controller_name=CONTROLLER."Controller";
//获取方法名

$action_name=ACTION."Action";

//实例化控制器对象
$controller=new $controller_name();
//调用方法
$controller->$action_name();

}
//注册为自动加载
private static function autoload(){
$arr=array(__CLASS__,'load');
//__CLASS__获取当前的类名
spl_autoload_register($arr);

}
//自动加载功能,实现控制器和数据库模型
//GoodsController GoodsModel
private static function load($classname){
if(substr($classname,-10)=="Controller"){

include CUR_CONTROLLER_PATH."{$classname}.class.php";
}elseif (substr($classname, -5)=='Model'){
//载入数据库模型
include MODEL_PATH."{$classname}.class.php";
}else{

}

}
}

?>

测试代码:

IndexController.class.php

<?php
//后台首页控制器
class IndexController{

public function indexAction(){

echo "admin....index...";

}

}

?>

最新文章

  1. 利用snowfall.jquery.js实现爱心满屏飞
  2. iOS架构一个中型普通App的一些经验总结
  3. apidoc
  4. php.ini修改php上传文件大小限制的方法详解
  5. LB负载均衡集群及NAT模式配置
  6. Lua 架构 The Lua Architecture
  7. HDU 4605 Magic Ball Game 树状数组
  8. 《Linux系统free命令的使用》学习笔记
  9. 旅行喵 React Native 技术实践
  10. AS3读取加密XML
  11. 四轴飞行器1.7 NRF24L01P无线通讯和改进型环形缓冲
  12. 记一次在Tomcat部署项目后无法启动该项目的例子
  13. form-validation--表单验证插件
  14. mysql主从复制安装详解
  15. 用web技术写APP
  16. JAVA中的算法
  17. 王之泰201771010131《面向对象程序设计(java)》第七周学习总结
  18. 使用MySQL的mysqldump命令备份数据库和把数据库备份文件恢复
  19. 接口的鉴权&amp;响应数据解密
  20. DELPHI 数据集在内存中快速查询方法

热门文章

  1. ng-repeat和ng-options区别
  2. 2018年哔哩哔哩bilibili前端开发工程师在线笔试1
  3. jquery-tags-input 使用经历
  4. 【Leetcode】【Easy】Valid Sudoku
  5. 查看pip install安装的python包的位置
  6. C# 调用 SQL server 初探
  7. 如何在SAP CRM里创建和消费Web service
  8. CRUD全栈式编程架构之服务层的设计
  9. IOS VFL语言(页面布局)
  10. Java实体类的属性类型与数据库表字段类型对应表