好得很程序员自学网
  • 首页
  • 后端语言
    • C#
    • PHP
    • Python
    • java
    • Golang
    • ASP.NET
  • 前端开发
    • Angular
    • react框架
    • LayUi开发
    • javascript
    • HTML与HTML5
    • CSS与CSS3
    • jQuery
    • Bootstrap
    • NodeJS
    • Vue与小程序技术
    • Photoshop
  • 数据库技术
    • MSSQL
    • MYSQL
    • Redis
    • MongoDB
    • Oracle
    • PostgreSQL
    • Sqlite
    • 数据库基础
    • 数据库排错
  • CMS系统
    • HDHCMS
    • WordPress
    • Dedecms
    • PhpCms
    • 帝国CMS
    • ThinkPHP
    • Discuz
    • ZBlog
    • ECSHOP
  • 高手进阶
    • Android技术
    • 正则表达式
    • 数据结构与算法
  • 系统运维
    • Windows
    • apache
    • 服务器排错
    • 网站安全
    • nginx
    • linux系统
    • MacOS
  • 学习教程
    • 前端脚本教程
    • HTML与CSS 教程
    • 脚本语言教程
    • 数据库教程
    • 应用系统教程
  • 新技术
  • 编程导航
    • 区块链
    • IT资讯
    • 设计灵感
    • 建站资源
    • 开发团队
    • 程序社区
    • 图标图库
    • 图形动效
    • IDE环境
    • 在线工具
    • 调试测试
    • Node开发
    • 游戏框架
    • CSS库
    • Jquery插件
    • Js插件
    • Web框架
    • 移动端框架
    • 模块管理
    • 开发社区
    • 在线课堂
    • 框架类库
    • 项目托管
    • 云服务

当前位置:首页>CMS系统>Dedecms
<tfoot draggable='sEl'></tfoot>

phpspl_auto的简单介绍

很多站长朋友们都不太清楚phpspl_auto,今天小编就来给大家整理phpspl_auto,希望对各位有所帮助,具体内容如下:

本文目录一览: 1、 PHP的SPL标准库的用法介绍 2、 php的spl_autoload_register作用域的问题 3、 请教PHP中spl_autoload_register与spl_autoload_unregister 用法 4、 详解PHP文件的自动加载(autoloading) 5、 PHP中__autoload()与spl_autoload_register()的区别?我怎么感觉只是自动加载的函数名改了一下而已?? PHP的SPL标准库的用法介绍

本文介绍下,php编程中SPL中的用法,SPL,PHP 标准库(Standard PHP Library) ,此从 PHP 5.0 起内置的组件和接口,有需要的朋友参考下。

PHP SPL的用法

SPL,PHP 标准库(Standard PHP Library) ,此从 PHP 5.0 起内置的组件和接口,并且从 PHP5.3 已逐渐的成熟。SPL 其实在所有的 PHP5 开发环境中被内置,同时无需任何设置。

似乎众多的 PHP 开发人员基本没有使用它,甚至闻所未闻。究其原因,可以追述到它那阳春白雪般的说明文档,使你忽略了「它的存在」。SPL 这块宝石犹如铁达尼的「海洋之心」般,被沉入海底。而现在它应该被我们捞起,并将它穿戴在应有的位置 ,而这也是这篇文章所要表述的观点。

SPL 提供了什么?

SPL 对 PHP 引擎进行了扩展,例如 ArrayAccess、Countable 和 SeekableIterator 等接口,它们用于以数组形式操作对象。同时,你还可以使用 RecursiveIterator、ArrayObejcts 等其他迭代器进行数据的迭代操作。

它还内置几个的对象例如 Exceptions、SplObserver、Spltorage 以及 splautoloadregister、splclasses、iteratorapply 等的帮助函数(helper functions),用于重载对应的功能。

这些工具聚合在一起就好比是把多功能的瑞士军刀,善用它们可以从质上提升 PHP 的代码效率。那么,如何发挥它的威力?

重载 autoloader

如果你是位「教科书式的程序员」,那么你保证了解如何使用 __autoload 去代替 includes/requires 操作惰性载入对应的类,对不?

但久之,你会发现你已经陷入了困境,首先是你要保证你的类文件必须在指定的文件路径中,例如在 Zend 框架中你必须使用「_」来分割类、方法名称(你如何解决这一问题?)。

另外的问题:

当项目变得越来越复杂, __autoload 内的逻辑也会变得相应的`复杂。到最后,甚至你会加入异常判断,以及将所有的载入类的逻辑如数写到其中。

大家都知道「鸡蛋不能放到一个篮子中」,利用 SPL 可以分离 __autoload 的载入逻辑。只需要写个你自己的 autoload 函数,然后利用 SPL 提供的函数重载它。

例如,上述 Zend 框架的问题,你可以重载 Zend loader 对应的方法,如果它没有找到对应的类,那么就使用先前定义的函数。

复制代码 代码示例:

<?php

class MyLoader {

public static function doAutoload($class) {

// 本模块对应的 autoload 操作

}

}

spl_autoload_register( array('MyLoader', 'doAutoload') );

?>

spl autoload register 还能以数组的形式加入多个载入逻辑。同时,你还可以利用spl autoload unregister 移除已经不再需要的载入逻辑,这功能总会用到的。

迭代器

迭代是常见设计模式之一,普遍应用于一组数据中的统一的遍历操作。可以毫不夸张的说,SPL 提供了所有你需要的对应数据类型的迭代器。

有个非常好的案例就是遍历目录。常规的做法就是使用 scandir ,然后跳过「.「 和 「..」,以及其它未满足条件的文件。例如你需要遍历个某个目录抽取其中的图片文件,就需要判断是否是 jpg、gif 结尾。

使用 SPL 的迭代器执行上述递归寻找指定目录中的图片文件的例子:

复制代码 代码示例:

<?php

class RecursiveFileFilterIterator extends FilterIterator {

// 满足条件的扩展名

protected $ext = array('jpg','gif');

/**

* 提供 $path 并生成对应的目录迭代器

*/

public function __construct($path) {

parent::__construct(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)));

}

/**

* 检查文件扩展名是否满足条件

* //

*/

public function accept() {

$item = $this->getInnerIterator();

if ($item->isFile()

in_array(pathinfo($item->getFilename(), PATHINFO_EXTENSION), $this->ext)) {

return TRUE;

}

}

}

// 实例化

foreach (new RecursiveFileFilterIterator('/path/to/something') as $item) {

echo $item . PHP_EOL;

}

?>

php的spl_autoload_register作用域的问题

__autoload 常用在自动加载类库处理 也就是网上说的 这种方法,根据类名,找出类文件,然后require_one spl_autoload_register() __autoload的最大缺陷是无法有多个autoload方法 好了, 想下下面的这个情景,你的项目引用了别人的一个项目,你的项目中有一个__autoload,别人的项目也有一个__autoload,这样两个__autoload就冲突了。解决的办法就是修改__autoload成为一个,这无疑是非常繁琐的。 因此我们急需使用一个autoload调用堆栈,这样spl的autoload系列函数就出现了。你可以使用spl_autoload_register注册多个自定义的autoload函数 如果你的PHP版本大于5.1的话,你就可以使用spl_autoload

请教PHP中spl_autoload_register与spl_autoload_unregister 用法

spl的全称是:标准PHP类库,spl函数是用来对php自带autoload_func机制的管理。

spl_autoload_register表示注册一个类到autoload_func中

spl_autoload_unregister表示注销autoload_func中指定的类

通过以上两个函数,我们就可以使用php自带的autoload_func进行自动加载类管理,而不必手动书写__autoload()类,而且效率会更高,是当前比较流行的一种自动加载使用趋势。

详解PHP文件的自动加载(autoloading)

传统上,在PHP里,当我们要用到一个class文件的时候,我们都得在文档头部require或者include一下:

<?php

require_once('includes/functions.php');

require_once('includes/database.php');

require_once('includes/user.php');

...

但是一旦要调用的文档多了,就得每次都写一行,瞅着也不美观,有什么办法能让PHP文档自动加载呢?

<?php

function

__autoload($class_name)

{

require

"./{$class_name}.php";

}

对,可以使用PHP的魔法函数__autoload(),上面的示例就是自动加载当前目录下的PHP文件。当然,实际当中,我们更可能会这么来使用:

<?php

function

__autoload($class_name)

{

$name

=

strtolower($class_name);

$path

=

"includes/{$name}.php";

if(file_exists($path)){

require_once($path);

}else{

die("the

file

{$class_name}

could

not

be

found");

}

}

也即是做了一定的文件名大小写处理,然后在require之前检查文件是否存在,不存在的话显示自定义的信息。

类似用法经常在私人项目,或者说是单一项目的框架中见到,为什么呢?因为你只能定义一个__autoload

function,在多人开发中,做不到不同的developer使用不同的自定义的autoloader,除非大家都提前说好了,都使用一个__autoload,涉及到改动了就进行版本同步,这很麻烦。

也主要是因为此,有个好消息,就是这个__autoload函数马上要在7.2版本的PHP中弃用了。

Warning

This

feature

has

been

DEPRECATED

as

of

PHP

7.2.0.

Relying

on

this

feature

is

highly

discouraged.

那么取而代之的是一个叫spl_autoload_register()的东东,它的好处是可以自定义多个autoloader.

//使用匿名函数来autoload

spl_autoload_register(function($class_name){

require_once('...');

});

//使用一个全局函数

function

Custom()

{

require_once('...');

}

spl_autoload_register('Custom');

//使用一个class当中的static方法

class

MyCustomAutoloader

{

static

public

function

myLoader($class_name)

{

require_once('...');

}

}

//传array进来,第一个是class名,第二个是方法名

spl_autoload_register(['MyCustomAutoloader','myLoader']);

//甚至也可以用在实例化的object上

class

MyCustomAutoloader

{

public

function

myLoader($class_name)

{

}

}

$object

=

new

MyCustomAutoloader;

spl_autoload_register([$object,'myLoader']);

值得一提的是,使用autoload,无论是__autoload(),还是spl_autoload_register(),相比于require或include,好处就是autoload机制是lazy

loading,也即是并不是你一运行就给你调用所有的那些文件,而是只有你用到了哪个,比如说new了哪个文件以后,才会通过autoload机制去加载相应文件。

当然,laravel包括各个package里也是经常用到spl_autoload_register,比如这里:

/**

*

Prepend

the

load

method

to

the

auto-loader

stack.

*

*

@return

void

*/

protected

function

prependToLoaderStack()

{

spl_autoload_register([$this,

'load'],

true,

true);

}

PHP中__autoload()与spl_autoload_register()的区别?我怎么感觉只是自动加载的函数名改了一下而已??

spl_autoload_register比__aotuload的好处:

1,可以按需多次写spl_autoload_register注册加载函数,加载顺序按谁先注册谁先调用。__aotuload由于是全局函数只能定义一次,不够灵活。

2,可以被catch到错误,而__aotuload不能。

3,spl_autoload_register注册的加载函数可以按需被spl_autoload_unregister掉

关于phpspl_auto的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。

查看更多关于phpspl_auto的简单介绍的详细内容...

声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did165326
更新时间:2023-02-17   阅读:36次

上一篇: php技术架构图 php的知识体系结构图

下一篇:ajaxphp提示下载的简单介绍

相关资讯

最新资料更新

  • 1.dedecms前台会员无法上传图片类型的解决方法
  • 2.dedecms 栏目目录用首字母生成的方法
  • 3.织梦模板正则批量替换文章内容内链变成绝对路径的方法
  • 4.织梦Dedecms在循环列表中获取会员信息的方法
  • 5.DedeCms批量写入数据的函数分析
  • 6.怎么解决DedecmsV5.7 SP1广告不能显示
  • 7.织梦dedecms获取当前栏目路径及栏目名称的方法
  • 8.织梦Dedecms设置伪静态详细方法
  • 9.dedecmsV5.5图片水印及图集手工上传无法加水印
  • 10.Dedecms程序SEO常用的列表标签调用代码集合 dedecms优化
  • 11.dedecms首页调用专题页描述和链接的实现方法
  • 12.织梦dedecms5.7版自动给图片添加alt属性的方法
  • 13.Dedecms图集批量上传提示报错302的解决方法
  • 14.织梦dede去掉后台登陆界面广告的方法
  • 15.织梦dedecms 忘记管理员后台密码的解决技巧
  • 16.dede调用其他栏目的文章或者缩略图列表且有分页效果的方法
  • 17.dedecms联动类别的图文使用方法
  • 18.DedeCMS的TAG标签无法保存和自动删除的解决方法
  • 19.dedecms5.7文章二次开发实现阅读全文功能的方法
  • 20.dedecms实现列表页缩略图随机调用的方法

CopyRight:2016-2025好得很程序员自学网 备案ICP:湘ICP备09009000号-16 http://www.haodehen.cn
本站资讯不构成任何建议,仅限于个人分享,参考须谨慎!
本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。

网站内容来源于网络分享,如有侵权发邮箱到:kenbest@126.com,收到邮件我们会即时下线处理。
网站框架支持:HDHCMS   51LA统计 百度统计
Copyright © 2018-2025 「好得很程序员自学网」
[ SiteMap ]