您的位置:首页 > 其它

设计模式(三)——自动加载

2016-04-26 00:00 253 查看
摘要: 不知道你有没有遇到这样的窘况,当我们在做一个大点的项目时候,在一个文件中可能会需要使用多个类,总是需要引入多个类文件,书写多条载入语句require/include/require_one/include_one,加大我们的代码书写,能不能有一种方法当我使用某个类,就提前自动载入该类文件呢?
有,这就是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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: