[首次分析]PHP写框架
index.php
<?php/* @Author HLZ* @Time 2016年8月3日 15:00:35* @Description 框架价格分析* 初始目录 分三个部分 * ①index.php * 入口文件设置,且统一命名空间* a.设置常量* define("HLZ_PATH",realpath(__DIR__));//获取入口目录位置* define("Mysql帐号密码");* b.引入自己写的Model、View、Controller基类* ②App文件夹 分四个文件夹* a.供引入的类库* b.Controller* c.View* d.Logic* 要求:其命名空间与类名恰好能找到文件对应.class.php文件* 统一自动引入机制,与框架搭建过程中常用的方法,详见下文* */define("HLZ_PATH",realpath(__DIR__."\\.."));//这里只有一个文件,我就当作只有Controller目录吧//Start.注意:这个是文件加载的方法,只能放在类外面
function __autoload($className){ //使用前提,命名空间得是 根,即namespace \;//Start:当实例化,对应的类,不存在于该php文件时,自动调用$file_where = HLZ_PATH."/".$className.'.class.php';$file_where=str_replace('\\',"/",$file_where);//转义成可以require的格式if(file_exists($file_where)){require_once "$file_where";}echo "已经require $file_where";
}//a.接口类
interface test{ //1.1.定义接口,interface//接口算是一个抽象类,但是接口中每个被抽象的方法,都必须被继承的类,全部实现function verify($username);//验证用户名function info();//验证信息
}
//b.接口逻辑类
class hlz_vip implements test{ //1.2.对应接口,实现,implementsprivate $string="VIP Interface Test!";public function verify($username){if($username==""){return '您未填写用户名';}return "Hello ".$username."!";}public function info(){return $this->string; }
}
//c.普通类
class show_info{private $username;public function show($username){$this->username= $username;$user_interface= new hlz_vip(); //2.1.1接口的调用$msg['Status'] = $user_interface->verify($username);$msg['Info'] = $user_interface->info();echo json_encode($msg);return $this; //3.0.链式调用,连贯操作,常应用于数据库操作}public function say(){echo "<h3>链式调用 成功!</h3>";}public function __construct(){//3.1.当实例化对象时,自动调用,【可以用与类名一样的函数来赖实现】echo "<h3>对象创建 成功!</h3><br/>";}public function __call($function_name, $args){ //4.1.当调用方法不存在时,自动调用echo "<h5>你所调用的函数:$function_name ,在该对象中不存在!</h5>";echo "<small>你刚刚输入的参数为:<br/>";print_r($args);echo "</small>";}public function __set($property_name, $value) {//5.1.当变量不存在与对象中 或者 变量为该对象的私有属性的时,自动调用return $this->$property_name = $value;}public function __get($property_name) {//6.1.当变量不存在与对象中 或者 变量为该对象的私有属性的时,自动调用return isset($this->$property_name) ? $this->$property_name : null;}public function __isset($property_name){//7.1.在类外部使用 isset() 函数来测定对象里面的私有成员是否被设定时,自动调用return isset($this->$property_name);}
}
$test = new show_info();
$test->show("HLZ")->say();//测试1:链式调用
$test->hlz("参数一","参数二");//测试2:这个函数不存在于对象中
$test= new \API\HLZ(); //测试3:未初始化引入对应类文件
HLZ.class.php
<?php
namespace API;
echo "自己加载成功";
class HLZ{function __construct(){echo "test类调用成功!";}
}
自动引入文件的问题
之前在调用的页面,没给命名空间,我们是用到的
function __autoload($className){require "$className";
}
办到的
可是,平时我们写框架的时候,加上命名空间是必须的
所以这里有一个新的方法由此而生
可以使用函数 spl_autoload_register
来注册一个类中的方法来代替 __autoload
具体如下
class require_file{static function load( $className ) {//一定得是静态函数$file_where = HLZ_PATH."/".$className.'.class.php';$file_where=str_replace('\\',"/",$file_where);//转义成可以require的格式if(file_exists($file_where)){require_once "$file_where";}echo "已经require $file_where";}
}
//登记自动加载的函数 //实例化对象时,如果没有对应的类//命名空间的名称、自动加载的类名、类名对应的静态方法
spl_autoload_register( array(__NAMESPACE__."\\require_file","load") );
[首次分析]PHP写框架相关推荐
- php框架写博客,用PHP写框架用框架写应用程序
现在有一个明显的趋势让PHPer必须清醒地认识到自己无论如何被分配在两大阵营中,别无选择: 要么是开发框架,要么是开发应用程序. 乍看之下会有人骂这个说法是***子放P,本来就没有第三种,你不是就说了 ...
- 从头开始写框架(一):浅谈JS模块化发展
博客申请下来已经过去一个月了,一直不知道写点什么,毕竟我的文笔不是很好orz. 不过既然申请下来了,不写点什么总是觉得很可惜.正好最近在自己写框架,就把自己的进程和一些心得体会分享出来吧. 写在前面: ...
- 【我们一起写框架】C#的AOP框架
原文:[我们一起写框架]C#的AOP框架 前言 AOP,大家都是听过的,它是一种面向切面的设计模式. 不过AOP虽然是被称为设计模式,但我们应该很少能看到AOP设计的框架.为什么呢? 因为,AOP单独 ...
- 计算机教案的自我分析怎么写,教案的自我分析怎么写.docx
文档介绍: 教案的自我分析怎么写教案的自我分析怎么写[篇一:认识自我教案]认识自我教案一.教育教学目标1.情感.态度与价值观:树立积极的自我概念,正确认识和评价自己,正确对待别人对自己的评价;认清和挖 ...
- 剖析如何自己写框架Struts和Mybatis,学其原理而非重复造轮子
Java写框架必会几个技术点 关于学习架构,必须会的几点技术 1. java反射技术 2. xml文件处理 3. properties属性文件处理 4. 线程安全机制 5. annocation注解 ...
- 论文中的结果分析怎么写?
正在写毕业论文的小伙伴们,你们的毕业论文写作完成到哪一步了?写好了开头,还没写好结尾的小伙伴,你知道毕业论文中的结果分析怎么写吗?不知道的话就来看一下这篇文章. 本篇文章分为以下几个部分: 一.毕业论 ...
- 《自己动手写框架8》:高屋建瓴,理念先行
<史记·高祖本纪>:"地势便利,其以下兵于诸侯,譬犹居高屋之上建瓴水也."这里用到了高屋建瓴这个词.意思是把瓶子里的水从高层顶上倾倒.比喻居高临下,不可阻遏的形势.现指 ...
- 秦小明 金融思维笔记 第三讲 财务分析1 商业分析的演绎框架amp;利润表的系统拆分
这套课程对于赚到钱的程序员如何让钱生钱,保持财富非常重要,也对于做互联网金融行业的程序员非常重要. 有兴趣听课程的可以联系我的公众号:湾区人工智能 回复:秦小明 秦小明 第一讲 宏观和微观经济 htt ...
- 《自己动手写框架1》:缘起
前言 自己动手写框架?第一次接触这本书的读者可能会有一些惊讶.是的,这就是写本书的缘由. 1.1 缘由 从毕业以来,我一直从事软件开发及软件管理,做过大量的项目与产品,但是还是喜欢平台软件及软件管理 ...
最新文章
- 手把手教你 Socket 通信(TCP/IP)
- 数据库自增主键可能产生的问题
- Java获取系统时间
- java generic faq_【公告】我的世界中国版JAVA不限号测试指引(FAQ)
- 杭电2897邂逅明下邂逅明下
- 苹果ipa签名解锁_朋友,iOS签名请了解一下
- KeyMob:移动聚合广告的潜力无限
- LeetCode力扣算法总结-go版本
- day09渗透简单测试流程以及PKI实验
- 什么是青藤零域·微隔离安全平台?
- 电脑连无线无法访问云服务器,小编教你如何解决电脑无法连接无线网络
- 工控安全都有哪些风险
- C语言——三目运算符的进阶用法,比较三个或者四个数的大小
- PyCharm 提示PEP 8: E302 expected 2 blank lines, found 1
- PQ节点-PV节点-平衡节点
- jetson windows_Jetson nano 配置远程桌面
- matlab 复数函数拟合,Matlab中实验数据【复数】的曲线拟合
- Docker知识点总结
- Python之建模数值逼近篇--一维插值
- docker在浏览器里为你提供深度学习系统!
热门文章
- Cocos2d-x 截屏功能集成
- The 15th UESTC Programming Contest Preliminary C - C0ins cdoj1554
- paip.最好的脚本语言node js 环境搭建连接mysql
- 围观窗体与组件01 - 零基础入门学习Delphi23
- .NET 2.0防止同用户同时登陆实例
- FPGA:下一代机器人感知处理器
- 像素级动态模糊(Pixel Motion Blur)
- Android拖拽详解
- cwRsync 同步时报错 STATUS_ACCESS_VIOLATION
- php http请求封装