设计模式(三)——自动加载
2016-04-26 00:00
253 查看
摘要: 不知道你有没有遇到这样的窘况,当我们在做一个大点的项目时候,在一个文件中可能会需要使用多个类,总是需要引入多个类文件,书写多条载入语句require/include/require_one/include_one,加大我们的代码书写,能不能有一种方法当我使用某个类,就提前自动载入该类文件呢?
有,这就是php提供的自动加载功能。
php提供了两种方案来自动载入:__autoload()函数和spl系列函数
一、前提约束
1.类文件命名方式采用驼峰写法,且以.class.php做后缀,比如:
2.一个类文件中只写一个类,且这个类的名称和文件名一致,比如:
类文件Page.class.php中的写类:
3.类文件都采用命名空间,且命名空间的名称就是从根目录到自己的路径名,比如:
目录: App/Home/Page.class.php的类文件的命名空间为:App\Home,即文件代码为:
二、测试目录
三、类文件代码
1.文件Page.class.php
2.文件Test.class.php
四、入口文件
1.方法一:使用__autoload函数自动加载类文件
index.php代码
运行结果:
2.方法二:使用spl函数
注意:spl函数是指一spl开头的一些列的函数
index.php代码
运行结果:
有,这就是php提供的自动加载功能。
php提供了两种方案来自动载入:__autoload()函数和spl系列函数
一、前提约束
1.类文件命名方式采用驼峰写法,且以.class.php做后缀,比如:
Page.class.php
2.一个类文件中只写一个类,且这个类的名称和文件名一致,比如:
类文件Page.class.php中的写类:
<?php class Page { }
3.类文件都采用命名空间,且命名空间的名称就是从根目录到自己的路径名,比如:
目录: App/Home/Page.class.php的类文件的命名空间为:App\Home,即文件代码为:
<?php namespace App\Home; class Page { }
二、测试目录
三、类文件代码
1.文件Page.class.php
<?php namespace App\Home; class Page { public function test(){ echo __FILE__."<br/>"; } }
2.文件Test.class.php
<?php namespace Lib; class Test { public function g(){ echo __FILE__."<br/>"; } }
四、入口文件
1.方法一:使用__autoload函数自动加载类文件
index.php代码
<?php //自动加载 function __autoload($class){ require $class.'.class.php'; } //实例化 $p=new App\Home\Page(); $p->test(); //实例化 $t=new Lib\Test(); $t->g();
运行结果:
E:\wamp\www\Test\Work\App\Home\Page.class.php E:\wamp\www\Test\Work\Lib\Test.class.php
2.方法二:使用spl函数
注意:spl函数是指一spl开头的一些列的函数
index.php代码
<?php spl_autoload_register("autoLoad");//注册给定的函数作为 __autoload 的实现 //自定义加载函数 function autoLoad($class){ require $class.'.class.php'; } //实例化 $p=new App\Home\Page(); $p->test(); //实例化 $t=new Lib\Test(); $t->g();
运行结果:
E:\wamp\www\Test\Work\App\Home\Page.class.php E:\wamp\www\Test\Work\Lib\Test.class.php
相关文章推荐
- 正确计划思维导图模板
- 自我约束思维导图模板
- 颠覆你的世界观思维导图模板
- 排序分类思维导图模板
- Mysql列类型-数值型
- mysql列类型-字符串
- Mysql列类型:日期时间型
- Mysql字段属性 和 约束
- 《高性能MySQL》の复制
- PowerPoint如何批量修改图表的legend
- Postgresql join
- html5为什么能替代Flash?搞不懂
- HTML5和原生APP优缺点大对比,世界究竟是谁的?
- PHP 学习笔记 - - - 简单方法的使用 (字符串与数字)
- 多线程
- log4j 2.5 使用教程详解(怎么使用log4j2)
- Python入门简单的静态网页爬虫2.0 (实现各模块的具体方法)
- Head First C 第十一章 网络与套接字 创建knock-knock服务器 partII
- Python错误之object() takes no parameters
- 堡垒机-麒麟开源堡垒机银行行业设计方案