PHP命名空间与自动加载类详解_第1页
PHP命名空间与自动加载类详解_第2页
PHP命名空间与自动加载类详解_第3页
PHP命名空间与自动加载类详解_第4页
PHP命名空间与自动加载类详解_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第PHP命名空间与自动加载类详解本文实例讲述了PHP命名空间与自动加载类。分享给大家供大家参考,具体如下:

今天我要给大家介绍的是PHP的命名空间和自动加载类

我先简单的分开演示在放在一起

大家请看:

什么是自动加载类?

想必大家都应该知道__autoload这个魔术方法

$db=newDB();

function__autoload($className)

echo$className;

exit();

//在这个里面引用类

在运用这个类只能加载一次,在很多时候我们要引入的不止一个类这个时候怎么办呢!

牛逼的php大神们出了个新方法来解决这个问题请看就是这个函数

spl_autoload_register()满足了此类需求。它实际上创建了autoload函数的队列,按定义时的顺序逐个执行。相比之下,__autoload()只可以定义一次。

这个函数的用法有很多这里先给大家介绍一种使用方法

如下:

functionload1($className)

echo1;

require$className.'.php';

spl_autoload_register('load1');//将load1函数注册到自动加载队列中。

$db=newDB();//找不到DB类,就会自动去调用刚注册的load1函数了

//php5.3之后,也可以像这样支持匿名函数了。

spl_autoload_register(function($className){

if(is_file('./lib/'.$className.'.php')){

require'./lib/'.$className.'.php';

多个spl_autoload_register的使用

判断是否有此文件

如果有引入如果没有没有如果了,哪来的如果

functionload1($className)

echo1;

if(is_file($className.'.php')){

require$className.'.php';

functionload2($className)

echo2;

if(is_file('./app/'.$className.'.php')){

require'./app/'.$className.'.php';

function__autoload($className)

echo3;

if(is_file('./lib/'.$className.'.php')){

require'./lib/'.$className.'.php';

//注册了3个

spl_autoload_register('load1');

spl_autoload_register('load2');

spl_autoload_register('__autoload');

$db=newDB();//DB就在本目录下

$info=newInfo();//Info在/lib/Info.php

我们可以打印spl_autoload_functions()函数,来显示一共注册了多少个自动加载:

var_dump(spl_autoload_functions());

//数组的形式输出

array(size=3)

0=string'load1'(length=5)

1=string'load2'(length=5)

2=string'__autoload'(length=10)

一个php文件里是不支持new两个名字的

这个时候我们就能用的到命名空间了

namespaceapp;

classnew{

publicfunctionten()

echo"85";

namespacehii;

classnew{

publicfunctionten()

echo"85";

spl_autoload_register自动加载+namespace命名空间的使用

废话不多数看例子

AutoLoading\loading

namespaceAutoLoading;

classloading{

publicstaticfunctionautoload($className)

//把\转换层/,便于兼容Linux文件找。Windows下是通用的

//由于namspace很规格,所以直接很快就能找到

$fileName=str_replace('\\','/',DIR.'\\'.$className).'.php';

if(is_file($fileName)){

require$fileName;

}else{

echo$fileName.'isnotexist';die;

上面就是一个自动加载的核心思想方法。下面我们就来spl_autoload_register来注册这个函数:

index.php

//定义当前的目录绝对路径

define('DIR',dirname(__FILE__));

//加载这个文件

requireDIR.'/loading.php';

//采用`命名空间`的方式注册。php5.3加入的

//也必须是得是static静态方法调用,然后就像加载namespace的方式调用,注意:不能使用use

spl_autoload_register("\\AutoLoading\\loading::autoload");

//调用三个namespace类

//定位到Lib目录下的Name.php

Lib\Name::test();

//定位到App目录下Android目录下的Name.php

App\Android\Name::test();

//定位到App目录下Ios目录下的Name.php

App\Ios\Name::test();

由于我们是采用PSR-O方式来定义namespace的命名的,所以很好的定位到这个文件的在哪个目录下了。很爽。对不对。

APP\Android\Name

namespaceApp\Android;

className

publicfunction__construct()

echo__NAMESPACE__."br

publicstaticfunctiontest()

echo__NAMESPACE__.'staticfunctiontestbr

所以就会很容易找到文件,并输出:

Libstaticfunctiontest

App\Androidstaticfunctiontest

App\Iosstaticfunctiontest

好了。基本的东西就讲完了.

更多关于PHP相关内容感兴趣的读者可查看本站专题:《php

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论