php foreach 参数强制类型转换的问题

yipeiwu_com5年前PHP代码库
所以,为了防止这样的信息出现,我使用foreach的时候,都会把参数进行强制类型转换,形势如下:
foreach((array)$arr as $key => $value);
这样做一直相安无事,就在前几天,突然出现了问题。我强制类型转换以后不能正常的调用object的方法了。
复制代码 代码如下:

<?php
class service implements Iterator{
function __construct($service_define,$filter=null){
$this->iterator = new ArrayIterator($service_define['list']);
$this->filter = $filter;
$this->valid();
}
function current(){
return $this->current_object;
}
public function rewind() {
$this->iterator->rewind();
}
public function key() {
return $this->iterator->current();
}
public function next() {
return $this->iterator->next();
}
public function valid() {
while($this->iterator->valid()){
if($this->filter()){
return true;
}else{
$this->iterator->next();
}
};
return false;
}
private function filter(){
$current = $this->iterator->current();
if($current){
$this->current_object = new Sameple($current);
if($this->current_object){
return true;
}
}
return false;
}
}
class Sameple{
var $class_name;
function __construct($class_name = null) {
$this->class_name = $class_name;
}
function show(){
echo $this->class_name,'<br />';
}
}
$servicelist = array(
'list' => array(
'first',
'second',
'third',
'fourth',
),
);
$ser = new service($servicelist);
foreach ($ser as $s) {
$s->show();
}
/*
//执行报错的代码 使用了将$ser执行强制类型转换操作
foreach ((array)$ser as $s) {
$s->show();
}*/

之所以出现这样的问题就是,foreach不但可以遍历数组,还可以遍历实现了Iterator接口的类。

我以前只注意到了数组的情况,把实现了Iterator接口的类的情况给忽略了。以后一定会注意。
依次为记。

相关文章

如何利用PHP执行.SQL文件

demo.php:复制代码 代码如下:<?php/*** 读取 sql 文件并写入数据库* @version 1.01 demo.php*/class DBManager{&nbs...

PHP中IP地址与整型数字互相转换详解

IP转换成整型存储是数据库优化一大趋势,不少人目前存储IP时还在使用字符串类型存储,字符串索引比整型索引消耗资源很多,特别是表中数据量大的时候,以及求查询某一个ip段的数据,今天说的ip...

学习php设计模式 php实现建造者模式

学习php设计模式 php实现建造者模式

建造者模式可以让一个产品的内部表象和和产品的生产过程分离开,从而可以生成具有不同内部表象的产品。 一、Builder模式结构图   二、Builder模式中主要角色 抽象建造...

PHP实现图片的等比缩放和Logo水印功能示例

本文实例讲述了PHP实现图片的等比缩放和Logo水印功能。分享给大家供大家参考,具体如下: /** * 等比缩放函数(以保存的方式实现) * @param string $pic...

php输入数据统一类实例

本文实例讲述了php输入数据统一类。分享给大家供大家参考。具体如下: <?php class cls_request{ private $getdata;//存储ge...