您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

PHP SPL标准库之接口(Interface)详解

2024/3/15 17:54:27发布27次查看
这篇文章主要介绍了php spl标准库之接口(interface)详解,本文分别讲解了coutable接口、outeriterator接口、recursiveiterator接口、seekableiterator接口、splob
php spl标准库总共有6个接口,如下:
1.countable
2.outeriterator
3.recursiveiterator
4.seekableiterator
5.splobserver
6.splsubject
其中outeriterator、recursiveiterator、seekableiterator都是继承iterator类的,下面会对每种接口作用和使用进行详细说明。
coutable接口:
实现countable接口的对象可用于count()函数计数。
复制代码 代码如下:
class mycount implements countable
{
    public function count()
    {
        static $count = 0;
        $count++;
        return $count;
    }
}
$count = new mycount();
$count->count();
$count->count();
echo count($count); //3
echo count($count); //4
说明:
调用count()函数时,mycount::count()方法被调用
count()函数的第二个参数将不会产生影响
outeriterator接口:
自定义或修改迭代过程。
复制代码 代码如下:
//iteratoriterator是outeriterator的一个实现类
class myouteriterator extends  iteratoriterator {
public function current()
    {
        return parent::current() . 'test';
    }
}
foreach(new myouteriterator(new arrayiterator(['b','a','c'])) as $key => $value) {
    echo $key->$value.php_eol;
}
/*
结果:
0->btest
1->atest
2->ctest
*/
在实际运用中,,outeriterator极其有用:
复制代码 代码如下:
$db = new pdo('mysql:host=localhost;dbname=test', 'root', 'mckee');
$db->query('set names utf8');
$pdostatement = $db->query('select * from test1', pdo::fetch_assoc);
$iterator = new iteratoriterator($pdostatement);
$tenrecordarray = iterator_to_array($iterator);
print_r($tenrecordarray);
recursiveiterator接口:
用于循环迭代多层结构的数据,recursiveiterator另外提供了两个方法:
recursiveiterator::getchildren 获取当前元素下子迭代器
recursiveiterator::haschildren 判断当前元素下是否有迭代器
复制代码 代码如下:
class myrecursiveiterator implements recursiveiterator
{
    private $_data;
    private $_position = 0;
public function __construct(array $data) {
        $this->_data = $data;
    }
public function valid() {
        return isset($this->_data[$this->_position]);
    }
public function haschildren() {
        return is_array($this->_data[$this->_position]);
    }
public function next() {
        $this->_position++;
    }
public function current() {
        return $this->_data[$this->_position];
    }
public function getchildren() {
        print_r($this->_data[$this->_position]);
    }
public function rewind() {
        $this->_position = 0;
    }
public function key() {
        return $this->_position;
    }
}
$arr = array(0, 1=> array(10, 20), 2, 3 => array(1, 2));
$mri = new myrecursiveiterator($arr);
foreach ($mri as $c => $v) {
    if ($mri->haschildren()) {
        echo $c has children: .php_eol;
        $mri->getchildren();
    } else {
        echo $v .php_eol;
    }
}
/*
结果:
0
1 has children:
array
(
    [0] => 10
    [1] => 20
)
2
3 has children:
array
(
    [0] => 1
    [1] => 2
)
*/
seekableiterator接口:
通过seek()方法实现可搜索的迭代器,用于搜索某个位置下的元素。
复制代码 代码如下:
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product