电子商城实录------定义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...";
}
}
?>
电子商城实录------定义init初始化的方法的更多相关文章
- Swift - 重写UIKit框架类的init初始化方法(以UITabBarController为例)
原来写了篇文章讲UITabBarController的用法,当时是从UIViewController跳转到UITabBarController页面,代码如下: 1 self.presentViewCo ...
- js二维数组定义和初始化的三种方法总结
js二维数组定义和初始化的三种方法总结 方法一:直接定义并且初始化,这种遇到数量少的情况可以用var _TheArray = [["0-1","0-2"],[& ...
- JavaEE开发之Spring中Bean的作用域、Init和Destroy方法以及Spring-EL表达式
上篇博客我们聊了<JavaEE开发之Spring中的依赖注入以及AOP>,本篇博客我们就来聊一下Spring框架中的Bean的作用域以及Bean的Init和Destroy方法,然后在聊一下 ...
- 【2016-08-18】转载:总结C++中几种结构体初始化的方法
作者:Ac_Von 博客地址:http://www.cnblogs.com/vongang/ 文章地址:http://www.cnblogs.com/vongang/archive/2011/07/3 ...
- 你好,C++(7)第三部分 C++世界众生相 3.2.1 变量的定义与初始化
第3部分 C++世界众生相 在听过了HelloWorld.exe的自我介绍,完成了与C++世界的第一次亲密接触后,大家是不是都急不可待地想要一试身手,开始编写C++程序了呢?程序的两大任务是描述数据和 ...
- C 语言字符数组的定义与初始化
1.字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素.char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y'} ...
- 潭州课堂25班:Ph201805201 第十课 类的定义,属性和方法 (课堂笔记)
类的定义 共同属性,特征,方法者,可分为一类,并以名命之 class Abc: # class 定义类, 后面接类名 ( 规则 首字母大写 ) cls_name = '这个类的名字是Abc' # 在类 ...
- GoLang学习之变量定义和初始化
变量命名原则 go语言的变量名有字母数字和下划线组成,首字母不能为数字,但是字母不仅仅只限于英文字母,所有的UTF-8字符都是可以的. 变量声明和初始化方式 使用var关键字 var a int = ...
- C语言中二维字符数组的定义和初始化
本篇日志关于二维字符数组的定义和初始化.我相信这篇文章属于菜鸟级的,高手请直接无视. 一般来说,我们可能会希望定义一个二维字符数组并且在定义的时候就用一些字符串来初始化它.比如说: ][MAX_LEN ...
随机推荐
- Jmeter(一)http接口添加header和cookie --转载
Jmeter(一)http接口添加header和cookie HTTP信息头管理器在Jmeter的使用过程中起着很重要的作用,通常我们在通过Jmeter向服务器发送http请求(get或者post ...
- python str、int、dict
一.str print(dir(int))#['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', ...
- Fidder详解之get和post请求
前言 本文会对Fidder这款工具的一些重要功能,进行详细讲解,带大家进入Fidder的世界,本文会让你明白,Fidder不仅是一个抓包分析工具,也是一个请求发送工具,更加可以当作为Mock Serv ...
- 2018年哔哩哔哩bilibili前端开发工程师在线笔试1
##基础编程能力考查(共1题) 给定一个数组,其中有n(1<n<10000)个整数,检查是否能通过修改不多余一个元素就能让数组从小到大排列. 例1: 输入:[4,2,3] 输出:true ...
- python多重继承
# 动物 Dog - 狗狗: Bat - 蝙蝠: Parrot - 鹦鹉: Ostrich - 鸵鸟. # 哺乳动物 鸟类 # 能跑 能飞 class Animal(object): pass # 大 ...
- 从java9开始就不再提供32位jdk
- vue v-on 带参事件
1.js代码 var list=[ //定义一个数组 {title:} ] var box=new Vue({ el:'.box', data:{ list:list }, methods:{ //d ...
- fastcgi+lighttpd+c语言 实现搜索输入提示
1.lighttpd 服务器 lighttpd是一个比较轻量的服务器,在运行fastcgi上效率较高.lighttpd只负责投递请求到fastcgi. centos输入yum install ligh ...
- The Tao to Excellent 2
就算自己现在的技术水平很菜,就算自己现在写的代码还是很烂,但我们还是要一直坚持在最前线,一直向上,也许,在前方,就有不一样的风景在等着我们. 因为我深深明白到一件事:人之所以选择混吃等死,是因为他们根 ...
- html基本代码书写
html的书写: datagrid---->toolbar---->按钮---->handler:function() var rows=$("gridId"). ...