数码资讯
PHPSPL标准库接口(接口)的详细解决方案
PHP SPL标准库总共有6个接口,如下所示: 可数的1。 2.outeriterator 3.recursiveiterator 4.seekableiterator 5.splobserver 6.splsubject outeriterator,recursiveiterator,和Seeka
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
PHP SPL标准库总共有6个接口,如下所示:
可数的1。
2.outeriterator
3.recursiveiterator
4.seekableiterator
5.splobserver
6.splsubject
outeriterator,recursiveiterator,和SeekableIterator都是从迭代器类继承,并利用各界面的功能将在下面详细解释。
coutable接口:
实现可计算接口的对象可用于计算计数()函数。
复制代码代码如下所示:
类mycount实现可数
{
公共功能计数()
{
静态$ = 0;
数+;
返回$计数;
}
}
$count =新mycount();
计算数();
计算数();
回声计数($计数);3
回声计数($计数);4
解释uff1a
当计数()函数被调用时,该mycount::计数的方法称为()
计数()函数的第二个参数不会产生影响。
outeriterator接口:
自定义或修改迭代过程。
复制代码代码如下所示:
/ / iteratoriterator是一个outeriterator实现类
类myouteriterator延伸iteratoriterator {
公共函数电流()
{
母:():返回当前测试;
}
}
foreach(新myouteriterator(New ArrayIterator({ B,A,C})为关键)= >美元值){
回声键->美元美元的价值。php_eol;
}
*
结果uff1a
0 - >测试
1 - >测试
2>C
* /
在实际使用中,outeriterator是非常有用的:
复制代码代码如下所示:
$ db =新PDO('mysql:主机为localhost;北京测试,'root ','mckee);
为数据库->查询(让名字utf8);
美元美元->查询PDOStatement =分贝('select * test1,PDO::fetch_assoc);
迭代器=新iteratoriterator美元(约合PDOStatement);
tenrecordarray = iterator_to_array美元($迭代器);
print_r($ tenrecordarray);
recursiveiterator接口:
迭代迭代的多层结构的数据,RecursiveIterator还提供了两个方法:
recursiveiterator::方法获取当前元素的迭代器
recursiveiterator::儿童是否有当前元素的迭代器
复制代码代码如下所示:
myrecursiveiterator recursiveiterator类实现
{
私人_data美元;
私人_position = 0美元;
公共功能__construct(数组数据){
美元-> _data = $数据;
}
公共函数有效(){
返回isset(美元->美元-> _position _data { });
}
公共功能的儿童(){
返回is_array(美元->美元-> _position _data { });
}
公共函数下一步(){
美元-> _position + +;
}
公共函数当前(){
返回_data美元->美元-> _position } {;
}
公共职能getChildren(){
print_r(美元->美元-> _position _data { });
}
公共函数倒带(){
美元-> _position = 0;
}
公共函数键(){
返回_position美元->;
}
}
$ ARR =阵列(0, 1 = >,阵列(10, 20, 2,3)=阵列(1, 2));
MRI =新myrecursiveiterator美元($ ARR);
foreach($ MRI $c = $ V){
如果($ MRI ->儿童()){
回声C美元的孩子:。php_eol;
$ MRI -> getChildren();
{人}
回声$ V。php_eol;
}
}
*
结果uff1a
零
1有孩子:
阵列
(
{ 0 } = 10
{ 1 } = 20
)
二
3有孩子:
阵列
(
{ 0 } = 1
{ 1 } = 2
)
* /
seekableiterator接口:
一个可搜索的迭代器是通过查找()方法实现的,该方法用于搜索某个位置下的元素。
复制代码代码如下所示:
类myseekableiterator实现seekableiterator {
私人$位置= 0;
私有数组=数组(
第一个元素
第二个元素
第三元素
第四个元素
);
公共函数查找($位置){
如果(!isset(美元->数组{ $位置})){
把新的outofboundsexception(无效的搜索位置(地位));
}
此位置= $位置;
}
公共函数倒带(){
$ = >位置= 0;
}
公共函数当前(){
返回这个数组;
}
公共函数键(){
返回$此位置;
}
公共函数下一步(){
$ + + >位置;
}
公共函数有效(){
返回isset(美元->阵列->位置{美元});
}
}
{试
它为新的myseekableiterator美元;
它(当前,)>;
$,寻求(2);
它(当前,)>;
$,寻求(1);
它(当前,)>;
$,寻求(10);
} catch(outofboundsexception e){
echo $ E(GetMessage)->;
}
*
结果uff1a
第一单元
第三元
二元
无效查找位置(10)
* /
splobserver和splsubject接口:
splobserver和splsubject之间的接口是用来实现Observer设计模式。观测器设计模式是当一个类的状态发生变化时,它的依赖对象将被通知和更新。例如,当一个事件发生时,它需要更新多个逻辑操作。传统的做法是在添加事件后编译逻辑。这种代码很难维护,观察者模式可以实现低耦合通知和更新机制。
看看SplSubject splobserver和界面结构:
复制代码代码如下所示:
观察 / / splsubject结构对象
接口splsubject {
公共功能的高度(splobserver $ / /观察);添加观测器
公共职能分离(splobserver $观测器; / /删除)观察员
公共函数(通知);
}
/ / splobserver结构的观察
接口splobserver {
更新函数(splsubject $); / /更新操作
}
请看下面的观察者实现示例:
复制代码代码如下所示:
类主体splsubject
{
私人$观察员=阵列();
公共功能的高度(splobserver $观察)
{
$ $ >观察员;
}
公共职能分离(splobserver $观察)
{
如果(美元指数= array_search($美元->观察员,观察员,真)){
unset(美元->观察员{ $指数});
}
}
公共函数通知()
{
foreach(美元美元->观察员Observer){
观察者> >更新($此);
}
}
}
observer1 splobserver类实现
{
更新函数(splsubject为主题)
{
回声逻辑1码。php_eol;
}
}
observer2 splobserver类实现
{
更新函数(splsubject为主题)
{
回声逻辑2码。php_eol;
}
}
主语=新主语();
$ ->附加(新observer1());
$ ->附加(新observer2());
$主题>通知();
*
结果uff1a
逻辑1码
逻辑2码
* /
可数的1。
2.outeriterator
3.recursiveiterator
4.seekableiterator
5.splobserver
6.splsubject
outeriterator,recursiveiterator,和SeekableIterator都是从迭代器类继承,并利用各界面的功能将在下面详细解释。
coutable接口:
实现可计算接口的对象可用于计算计数()函数。
复制代码代码如下所示:
类mycount实现可数
{
公共功能计数()
{
静态$ = 0;
数+;
返回$计数;
}
}
$count =新mycount();
计算数();
计算数();
回声计数($计数);3
回声计数($计数);4
解释uff1a
当计数()函数被调用时,该mycount::计数的方法称为()
计数()函数的第二个参数不会产生影响。
outeriterator接口:
自定义或修改迭代过程。
复制代码代码如下所示:
/ / iteratoriterator是一个outeriterator实现类
类myouteriterator延伸iteratoriterator {
公共函数电流()
{
母:():返回当前测试;
}
}
foreach(新myouteriterator(New ArrayIterator({ B,A,C})为关键)= >美元值){
回声键->美元美元的价值。php_eol;
}
*
结果uff1a
0 - >测试
1 - >测试
2>C
* /
在实际使用中,outeriterator是非常有用的:
复制代码代码如下所示:
$ db =新PDO('mysql:主机为localhost;北京测试,'root ','mckee);
为数据库->查询(让名字utf8);
美元美元->查询PDOStatement =分贝('select * test1,PDO::fetch_assoc);
迭代器=新iteratoriterator美元(约合PDOStatement);
tenrecordarray = iterator_to_array美元($迭代器);
print_r($ tenrecordarray);
recursiveiterator接口:
迭代迭代的多层结构的数据,RecursiveIterator还提供了两个方法:
recursiveiterator::方法获取当前元素的迭代器
recursiveiterator::儿童是否有当前元素的迭代器
复制代码代码如下所示:
myrecursiveiterator recursiveiterator类实现
{
私人_data美元;
私人_position = 0美元;
公共功能__construct(数组数据){
美元-> _data = $数据;
}
公共函数有效(){
返回isset(美元->美元-> _position _data { });
}
公共功能的儿童(){
返回is_array(美元->美元-> _position _data { });
}
公共函数下一步(){
美元-> _position + +;
}
公共函数当前(){
返回_data美元->美元-> _position } {;
}
公共职能getChildren(){
print_r(美元->美元-> _position _data { });
}
公共函数倒带(){
美元-> _position = 0;
}
公共函数键(){
返回_position美元->;
}
}
$ ARR =阵列(0, 1 = >,阵列(10, 20, 2,3)=阵列(1, 2));
MRI =新myrecursiveiterator美元($ ARR);
foreach($ MRI $c = $ V){
如果($ MRI ->儿童()){
回声C美元的孩子:。php_eol;
$ MRI -> getChildren();
{人}
回声$ V。php_eol;
}
}
*
结果uff1a
零
1有孩子:
阵列
(
{ 0 } = 10
{ 1 } = 20
)
二
3有孩子:
阵列
(
{ 0 } = 1
{ 1 } = 2
)
* /
seekableiterator接口:
一个可搜索的迭代器是通过查找()方法实现的,该方法用于搜索某个位置下的元素。
复制代码代码如下所示:
类myseekableiterator实现seekableiterator {
私人$位置= 0;
私有数组=数组(
第一个元素
第二个元素
第三元素
第四个元素
);
公共函数查找($位置){
如果(!isset(美元->数组{ $位置})){
把新的outofboundsexception(无效的搜索位置(地位));
}
此位置= $位置;
}
公共函数倒带(){
$ = >位置= 0;
}
公共函数当前(){
返回这个数组;
}
公共函数键(){
返回$此位置;
}
公共函数下一步(){
$ + + >位置;
}
公共函数有效(){
返回isset(美元->阵列->位置{美元});
}
}
{试
它为新的myseekableiterator美元;
它(当前,)>;
$,寻求(2);
它(当前,)>;
$,寻求(1);
它(当前,)>;
$,寻求(10);
} catch(outofboundsexception e){
echo $ E(GetMessage)->;
}
*
结果uff1a
第一单元
第三元
二元
无效查找位置(10)
* /
splobserver和splsubject接口:
splobserver和splsubject之间的接口是用来实现Observer设计模式。观测器设计模式是当一个类的状态发生变化时,它的依赖对象将被通知和更新。例如,当一个事件发生时,它需要更新多个逻辑操作。传统的做法是在添加事件后编译逻辑。这种代码很难维护,观察者模式可以实现低耦合通知和更新机制。
看看SplSubject splobserver和界面结构:
复制代码代码如下所示:
观察 / / splsubject结构对象
接口splsubject {
公共功能的高度(splobserver $ / /观察);添加观测器
公共职能分离(splobserver $观测器; / /删除)观察员
公共函数(通知);
}
/ / splobserver结构的观察
接口splobserver {
更新函数(splsubject $); / /更新操作
}
请看下面的观察者实现示例:
复制代码代码如下所示:
类主体splsubject
{
私人$观察员=阵列();
公共功能的高度(splobserver $观察)
{
$ $ >观察员;
}
公共职能分离(splobserver $观察)
{
如果(美元指数= array_search($美元->观察员,观察员,真)){
unset(美元->观察员{ $指数});
}
}
公共函数通知()
{
foreach(美元美元->观察员Observer){
观察者> >更新($此);
}
}
}
observer1 splobserver类实现
{
更新函数(splsubject为主题)
{
回声逻辑1码。php_eol;
}
}
observer2 splobserver类实现
{
更新函数(splsubject为主题)
{
回声逻辑2码。php_eol;
}
}
主语=新主语();
$ ->附加(新observer1());
$ ->附加(新observer2());
$主题>通知();
*
结果uff1a
逻辑1码
逻辑2码
* /
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。