所以,为了防止这样的信息出现,我使用foreach的时候,都会把参数进行强制类型转换,形势如下:
foreach((array)$arras$key=>$value);
这样做一直相安无事,就在前几天,突然出现了问题。我强制类型转换以后不能正常的调用object的方法了。
复制代码代码如下:
classserviceimplementsIterator{
function__construct($service_define,$filter=null){
$this->iterator=newArrayIterator($service_define['list']);
$this->filter=$filter;
$this->valid();
}
functioncurrent(){
return$this->current_object;
}
publicfunctionrewind(){
$this->iterator->rewind();
}
publicfunctionkey(){
return$this->iterator->current();
}
publicfunctionnext(){
return$this->iterator->next();
}
publicfunctionvalid(){
while($this->iterator->valid()){
if($this->filter()){
returntrue;
}else{
$this->iterator->next();
}
};
returnfalse;
}
privatefunctionfilter(){
$current=$this->iterator->current();
if($current){
$this->current_object=newSameple($current);
if($this->current_object){
returntrue;
}
}
returnfalse;
}
}
classSameple{
var$class_name;
function__construct($class_name=null){
$this->class_name=$class_name;
}
functionshow(){
echo$this->class_name,'
';
}
}
$servicelist=array(
'list'=>array(
'first',
'second',
'third',
'fourth',
),
);
$ser=newservice($servicelist);
foreach($seras$s){
$s->show();
}
/*
//执行报错的代码使用了将$ser执行强制类型转换操作
foreach((array)$seras$s){
$s->show();
}*/
之所以出现这样的问题就是,foreach不但可以遍历数组,还可以遍历实现了Iterator接口的类。
我以前只注意到了数组的情况,把实现了Iterator接口的类的情况给忽略了。以后一定会注意。
依次为记。
您可能感兴趣的文章:PHP中的类型约束介绍PHP学习笔记(三):数据类型转换与常量介绍PHP中数据类型转换的三种方式浅析php数据类型转换解析PHP将对象转换成数组的方法(兼容多维数组类型)浅谈PHP强制类型转换,慎用!php学习之数据类型之间的转换代码PHP变量类型的强制转换PHP类型转换函数intvalPHP类型约束用法示例