电子商城实录------定义init初始化的方法

路由方法的设置

//路由方法
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...";


}


}

 

 

?>

 

posted @ 2019-01-23 00:53  周行知  阅读(234)  评论(0编辑  收藏  举报