2024-07-19 20:49:06 | 我爱编程网
本文介绍下,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)));
}
/**
* 检查文件扩展名是否满足条件
* // www.jbxue.com
*/
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;
}
?>
我爱编程网(https://www.52biancheng.com)小编还为大家带来php怎么方法重载的相关内容。
php面向对象(OOP)编程完全教程:12.重载新的方法php同一个程序中不同脚本里能用相同的变量名吗可以,但是你要确保这两个变量不会同时出现,比如在A文件中定义了$aa,在文件中也定义了$aa,同时A包含了B文件,这样就会出问题。不过如果变量有域的话就不会引起冲突了。比如某个函数里定义了$aa,同时函数外面也有$aa,但是他们不会冲突。php怎么去除重复的值在PHP中去除重复值的函数为array_unique()。此函数会从数组中移除
Thinkphp空操作.空控制器.命名空间详解1、空操作空操作是指系统在找不到请求的操作方法的时候,会定位到空操作(_empty)方法来执行,利用这个机制,我们可以实现错误页面和一些URL的优化。网址/index.php/Home/Main/login网址/index.php/Home/Main/hello空操作出现页面:显示的错误信息过于详细,为安全以及优化页面起见
请问PHP构造函数的含义php的两大oop使用型函数:构造函数(__construct)和析构函数(__destruct);构造函数:当在某一页面写了众多函数,其中就包括构造函数,当你调用其中任一函数时,都将在调用此函数前先调用构造函数,如:你把链接数据库代码写到构造函数里面,然后在使用增删改查时,就不用再写连接s数据库语句了,因为有构造函数在,你就只用写增删改查类sql语句就可以了。
php数组循环,相同数值怎样只保留一个?数组的键值分别是什么?通用的思路在foreach循环输出中做判断日期相同的去掉,用一个新的数组去存储PHP数组去除重复项 有个内置函数array_unique (),但是php的 array_unique函数只适用于一维数组,对多维数组并不适用用php随机生成不重复的数字php基础教程:用php随机生成不重复的数字。?php$num=3
uniqueidphp下判断数组中是否存在相同的值array_uniquearray_unique()函数在PHP中用于去除数组中的重复值,确保返回的新数组中不包含任何重复的元素。此函数保留数组中元素的键名不变,但在内部对值进行排序,仅保留首次遇到的键名。如果数组中的两个元素在字符串比较下相同,那么第一个元素将被保留。考虑以下实例:如果数组包含"a"=>"green","red"
如何将PHP表单提交实现提交到多个表的不同字段?如果您想在PHP表单中实现提交到多个表的不同字段,可以使用如下步骤来实现:在表单中定义相应的字段,用于获取用户输入的数据。使用PHP代码从表单中获取用户输入的数据。使用PHP中的数据库操作函数(例如MySQLi或PDO),连接到数据库,并且向不同的表插入数据。例如,如果您想插入用户名和电子邮件到user
PHP中编写一个函数找出k以内最大的10个不足10个则是所有能被13整除但是不能被17整除的自然数?可以使用range函数来创建一个包含指定范围内的整数序列的数组,然后使用array_filter函数来过滤数组中满足特定条件的元素,最后使用array_slice函数来从数组中取出前10个元素。示例代码如下:==============functiongetNumbers($k){
php如何统计一个数组中相同元素的个数简单的循环即可,选出重复(出现次数大于等于2)的元素并统计每个重复元素出现的次数:php中的array_count_values()函数可以实现array_count_values()函数用于统计数组中所有值出现的次数。本函数返回一个数组,其元素的键名是原数组的值,键值是该值在原数组中出现的次数。array_count_valu
2025-02-01 20:24:39
2024-01-05 14:11:24
2025-02-12 03:21:37
2025-02-10 15:19:48
2025-01-28 17:58:32
2024-11-22 05:08:01