PHP SPL标准库中的常用函数介绍


Posted in PHP onMay 11, 2015

PHP SPL标准库中提供了一些函数用来处理如自动加载、迭代器处理等。

spl_autoload_extensions()添加spl_autoload()可加载的文件扩展名
spl_autoload_register()注册函数到SPL __autoload函数栈中。

/*test1.php*/

<?php

class Test1

{

}

 

/*test2.lib.php*/

<?php

class Test2

{

}

 

/*test.php*/

<?php

//设置可加载类的文件扩展名

spl_autoload_extensions(".php,.inc.php,.class.php,.lib.php");

//设置include_path,autoload会在这些path中去寻找类文件,可通过PATH_SEPARATOR添加多个path

set_include_path(get_include_path().PATH_SEPARATOR.'libs/');

//不提供参数,默认实现函数是spl_autoload()

spl_autoload_register();

 

$test1 = new Test1();

$test2 = new Test2();

spl_autoload()它是__autoload()的默认实现,它会去include_path中加载文件(.php/.inc)

/*test1.php*/

<?php

class Test1

{

}

 

/*test.php*/

<?php

set_include_path(get_include_path().PATH_SEPARATOR.'libs/');

spl_autoload('test1');

$test1 = new Test1();

spl_autoload_call()调用所有spl_autoload_register注册函数来加载文件

/*test1.php*/

<?php

class Test

{

    public function getFilename()

    {

        echo 'test1.php';

    }

}

 

/*test2.lib.php*/

<?php

class Test

{

    public function getFilename()

    {

        echo 'test2.lib.php';

    }

}

 

/*test.php*/

<?php

 

function loader($classname)

{

    if($classname == 'Test1') {

        require __DIR__ . '/test1.php';

    }

    if($classname == 'Test2') {

        require __DIR__ . '/test2.lib.php';

    }

}

 

spl_autoload_register('loader');

spl_autoload_call('Test2');

 

 

$test = new Test();

$test->getFilename(); //test2.lib.php

其它SPL 函数介绍:
class_implements — 返回指定的类实现的所有接口。
class_parents — 返回指定类的父类。
class_uses — Return the traits used by the given class
iterator_apply — 为迭代器中每个元素调用一个用户自定义函数
iterator_count — 计算迭代器中元素的个数
iterator_to_array — 将迭代器中的元素拷贝到数组
spl_autoload_functions — 返回所有已注册的__autoload()函数
spl_autoload_unregister — 注销已注册的__autoload()函数
spl_classes — 返回所有可用的SPL类
spl_object_hash — 返回指定对象的hash id

如iterator相关函数使用:

$iterator  = new  ArrayIterator (array( 'recipe' => 'pancakes' ,  'egg' ,  'milk' ,  'flour' ));

 

print_r(iterator_to_array($iterator)); //将迭代器元素转化为数组

echo iterator_count($iterator); //计算迭代器元素的个数

print_r(iterator_apply($iterator, 'print_item', array($iterator)));//为迭代器每个元素调用自定义函数

 

 

function print_item(Iterator $iterator)

{

    echo  strtoupper ( $iterator -> current ()) .  "\n" ;

    return  TRUE ;

}
PHP 相关文章推荐
PHP.MVC的模板标签系统(二)
Sep 05 PHP
安装PHP可能遇到的问题“无法载入mysql扩展” 的解决方法
Apr 16 PHP
深入mysql_fetch_row()与mysql_fetch_array()的区别详解
Jun 05 PHP
PHP模板引擎Smarty的缓存使用总结
Apr 24 PHP
PHP中file_exists()判断中文文件名无效的解决方法
Nov 12 PHP
php递归法读取目录及文件的方法
Jan 30 PHP
PHP开发注意事项总结
Feb 04 PHP
php支持断点续传、分块下载的类
May 02 PHP
浅析php如何实现App常用的秒发功能
Aug 03 PHP
php实现基于openssl的加密解密方法
Sep 30 PHP
php 微信公众平台开发模式实现多客服的实例代码
Nov 07 PHP
通过PHP实现用户注册后邮箱验证激活
Nov 10 PHP
PHP中的类型约束介绍
May 11 #PHP
PHP SPL标准库之接口(Interface)详解
May 11 #PHP
PHP SPL标准库之文件操作(SplFileInfo和SplFileObject)实例
May 11 #PHP
PHP设计模式之适配器模式代码实例
May 11 #PHP
Mac环境下php操作mysql数据库的方法分享
May 11 #PHP
PHP设计模式之装饰者模式代码实例
May 11 #PHP
PHP超牛逼无限极分类生成树方法
May 11 #PHP
You might like
一个php作的文本留言本的例子(三)
2006/10/09 PHP
yii2-GridView在开发中常用的功能及技巧总结
2017/01/07 PHP
Yii2 队列 shmilyzxt/yii2-queue 简单概述
2017/08/02 PHP
thinkPHP3.2.3结合Laypage实现的分页功能示例
2018/05/28 PHP
使用JS进行目录上传(相当于批量上传)
2010/12/05 Javascript
当jQuery遭遇CoffeeScript的时候 使用分享
2011/09/17 Javascript
js自定义事件及事件交互原理概述(一)
2013/02/01 Javascript
jQuery+ajax中getJSON() 用法实例
2014/12/22 Javascript
jQuery通过扩展实现抖动效果的方法
2015/03/11 Javascript
javascript中关于&amp;&amp; 和 || 表达式的小技巧分享
2015/04/10 Javascript
原生js实现商品放大镜效果
2017/01/12 Javascript
微信小程序中多个页面传参通信的学习与实践
2017/05/05 Javascript
深究AngularJS中ng-drag、ng-drop的用法
2017/06/12 Javascript
JS鼠标滚动分页效果示例
2017/07/05 Javascript
Vue学习笔记进阶篇之单元素过度
2017/07/19 Javascript
vue 运用mock数据的示例代码
2017/11/07 Javascript
解决VUE框架 导致绑定事件的阻止冒泡失效问题
2018/02/24 Javascript
Angular5中调用第三方js插件的方法
2018/02/26 Javascript
js中null与空字符串&quot;&quot;的区别讲解
2019/01/17 Javascript
简单了解JavaScript中常见的反模式
2019/06/21 Javascript
JS实现基本的网页计算器功能示例
2020/01/16 Javascript
使用js实现单链解决前端队列问题的方法
2020/02/03 Javascript
[01:03:50]DOTA2-DPC中国联赛 正赛 CDEC vs DLG BO3 第二场 2月7日
2021/03/11 DOTA
Python写的一个简单DNS服务器实例
2014/06/04 Python
Python爬虫设置代理IP的方法(爬虫技巧)
2018/03/04 Python
如何使用Flask-Migrate拓展数据库表结构
2019/07/24 Python
使用Python实现牛顿法求极值
2020/02/10 Python
pycharm实现在子类中添加一个父类没有的属性
2020/03/12 Python
python 实现朴素贝叶斯算法的示例
2020/09/30 Python
Pycharm中使用git进行合作开发的教程详解
2020/11/17 Python
生产车间实习自我鉴定
2013/09/23 职场文书
社区戒毒工作方案
2014/06/04 职场文书
音乐学专业求职信
2014/07/22 职场文书
销售目标责任书
2014/07/23 职场文书
小学生思想品德评语
2014/12/31 职场文书
关于ObjectUtils.isEmpty() 和 null 的区别
2022/02/28 Java/Android