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写框架相关推荐

  1. php框架写博客,用PHP写框架用框架写应用程序

    现在有一个明显的趋势让PHPer必须清醒地认识到自己无论如何被分配在两大阵营中,别无选择: 要么是开发框架,要么是开发应用程序. 乍看之下会有人骂这个说法是***子放P,本来就没有第三种,你不是就说了 ...

  2. 从头开始写框架(一):浅谈JS模块化发展

    博客申请下来已经过去一个月了,一直不知道写点什么,毕竟我的文笔不是很好orz. 不过既然申请下来了,不写点什么总是觉得很可惜.正好最近在自己写框架,就把自己的进程和一些心得体会分享出来吧. 写在前面: ...

  3. 【我们一起写框架】C#的AOP框架

    原文:[我们一起写框架]C#的AOP框架 前言 AOP,大家都是听过的,它是一种面向切面的设计模式. 不过AOP虽然是被称为设计模式,但我们应该很少能看到AOP设计的框架.为什么呢? 因为,AOP单独 ...

  4. 计算机教案的自我分析怎么写,教案的自我分析怎么写.docx

    文档介绍: 教案的自我分析怎么写教案的自我分析怎么写[篇一:认识自我教案]认识自我教案一.教育教学目标1.情感.态度与价值观:树立积极的自我概念,正确认识和评价自己,正确对待别人对自己的评价;认清和挖 ...

  5. 剖析如何自己写框架Struts和Mybatis,学其原理而非重复造轮子

    Java写框架必会几个技术点 关于学习架构,必须会的几点技术 1. java反射技术 2. xml文件处理 3. properties属性文件处理 4. 线程安全机制 5. annocation注解 ...

  6. 论文中的结果分析怎么写?

    正在写毕业论文的小伙伴们,你们的毕业论文写作完成到哪一步了?写好了开头,还没写好结尾的小伙伴,你知道毕业论文中的结果分析怎么写吗?不知道的话就来看一下这篇文章. 本篇文章分为以下几个部分: 一.毕业论 ...

  7. 《自己动手写框架8》:高屋建瓴,理念先行

    <史记·高祖本纪>:"地势便利,其以下兵于诸侯,譬犹居高屋之上建瓴水也."这里用到了高屋建瓴这个词.意思是把瓶子里的水从高层顶上倾倒.比喻居高临下,不可阻遏的形势.现指 ...

  8. 秦小明 金融思维笔记 第三讲 财务分析1 商业分析的演绎框架amp;利润表的系统拆分

    这套课程对于赚到钱的程序员如何让钱生钱,保持财富非常重要,也对于做互联网金融行业的程序员非常重要. 有兴趣听课程的可以联系我的公众号:湾区人工智能 回复:秦小明 秦小明 第一讲 宏观和微观经济 htt ...

  9. 《自己动手写框架1》:缘起

    前言 自己动手写框架?第一次接触这本书的读者可能会有一些惊讶.是的,这就是写本书的缘由. 1.1  缘由 从毕业以来,我一直从事软件开发及软件管理,做过大量的项目与产品,但是还是喜欢平台软件及软件管理 ...

最新文章

  1. 手把手教你 Socket 通信(TCP/IP)
  2. 数据库自增主键可能产生的问题
  3. Java获取系统时间
  4. java generic faq_【公告】我的世界中国版JAVA不限号测试指引(FAQ)
  5. 杭电2897邂逅明下邂逅明下
  6. 苹果ipa签名解锁_朋友,iOS签名请了解一下
  7. KeyMob:移动聚合广告的潜力无限
  8. LeetCode力扣算法总结-go版本
  9. day09渗透简单测试流程以及PKI实验
  10. 什么是青藤零域·微隔离安全平台?
  11. 电脑连无线无法访问云服务器,小编教你如何解决电脑无法连接无线网络
  12. 工控安全都有哪些风险
  13. C语言——三目运算符的进阶用法,比较三个或者四个数的大小
  14. PyCharm 提示PEP 8: E302 expected 2 blank lines, found 1
  15. PQ节点-PV节点-平衡节点
  16. jetson windows_Jetson nano 配置远程桌面
  17. matlab 复数函数拟合,Matlab中实验数据【复数】的曲线拟合
  18. Docker知识点总结
  19. Python之建模数值逼近篇--一维插值
  20. docker在浏览器里为你提供深度学习系统!

热门文章

  1. Cocos2d-x 截屏功能集成
  2. The 15th UESTC Programming Contest Preliminary C - C0ins cdoj1554
  3. paip.最好的脚本语言node js 环境搭建连接mysql
  4. 围观窗体与组件01 - 零基础入门学习Delphi23
  5. .NET 2.0防止同用户同时登陆实例
  6. FPGA:下一代机器人感知处理器
  7. 像素级动态模糊(Pixel Motion Blur)
  8. Android拖拽详解
  9. cwRsync 同步时报错 STATUS_ACCESS_VIOLATION
  10. php http请求封装