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

 更新时间:2010年12月10日 14:53:30   作者:  
大家都知道foreach的参数如果不是数组类型,在运行的时候 就会出现类似“Warning: Invalid argument supplied for foreach() in XXX”warning信息。
所以,为了防止这样的信息出现,我使用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用SAX解析XML的实现代码与问题分析

    PHP用SAX解析XML的实现代码与问题分析

    近日在做一个解析XML的小程序,因为服务器是PHP4的,XML解析函数只能用SAX方式的xml_parser来解析了。
    2011-08-08
  • 解读PHP的Yii框架中请求与响应的处理流程

    解读PHP的Yii框架中请求与响应的处理流程

    这篇文章主要介绍了PHP的Yii框架中请求与响应的处理流程,这也是Yii处理网站后台的最基本功能,需要的朋友可以参考下
    2016-03-03
  • 详谈PHP面向对象中常用的关键字和魔术方法

    详谈PHP面向对象中常用的关键字和魔术方法

    下面小编就为大家带来一篇详谈PHP面向对象中常用的关键字和魔术方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • php内核解析:PHP中的哈希表

    php内核解析:PHP中的哈希表

    PHP中使用最为频繁的数据类型非字符串和数组莫属,PHP比较容易上手也得益于非常灵活的数组类型。 在开始详细介绍这些数据类型之前有必要介绍一下哈希表(HashTable)。 哈希表是PHP实现中尤为关键的数据结构
    2014-01-01
  • PHP APC的安装与使用详解

    PHP APC的安装与使用详解

    本篇文章是对PHP中APC的安装与使用进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • PHP实现批量修改文件后缀名的方法

    PHP实现批量修改文件后缀名的方法

    这篇文章主要介绍了PHP实现批量修改文件后缀名的方法,涉及php针对文件的递归遍历及重命名的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • 解析Ubuntu下crontab命令的用法

    解析Ubuntu下crontab命令的用法

    本篇文章是对关于Ubuntu下crontab命令的一些用法进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • php统计文件大小,以GB、MB、KB、B输出

    php统计文件大小,以GB、MB、KB、B输出

    学习了fread读取命令,用到了filesize函数,知道这个函数定大有用到的时候,遂用之编写统计文件大小函数
    2011-05-05
  • PHP利用ueditor实现上传图片添加水印

    PHP利用ueditor实现上传图片添加水印

    在上传图片时,有时需要添加水印。如果每个都用PS添加的话,会有些麻烦。本文将为大家介绍PHP如何利用ueditor实现上传图片添加水印,感兴趣的可以了解一下
    2022-07-07
  • ThinkPHP中调用PHPExcel的实现代码

    ThinkPHP中调用PHPExcel的实现代码

    本文介绍ThinkPHP中处理导出成Excel文件的一个PHP库,PHPExcel。它可以很容易的生成出一个完整的、复杂的Excel文件,需要的朋友可以参考下
    2017-04-04

最新评论