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打印一个边长为N的实心和空心菱型的方法

    php打印一个边长为N的实心和空心菱型的方法

    这篇文章主要介绍了php打印一个边长为N的实心和空心菱型的方法,实例分析了php循环语句绘制图形的技巧,需要的朋友可以参考下
    2015-03-03
  • php通过array_shift()函数移除数组第一个元素的方法

    php通过array_shift()函数移除数组第一个元素的方法

    这篇文章主要介绍了php通过array_shift()函数移除数组第一个元素的方法,涉及php中array_shift()函数操作数组的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • php5新改动之短标记启用方法

    php5新改动之短标记启用方法

    PHP5中为了规范性的考虑.短标记<?......?>这种方式默认是被关闭的.只支持<?php....?>的标准标记.
    2008-09-09
  • PHP6 中可能会出现的新特性预览

    PHP6 中可能会出现的新特性预览

    PHP核心团队开发者Pierre Joye近日在官网上贴出了PHP6中可能会出现的新特性。之所以说是“可能会出现”,是因为目前PHP6项目还处于草案阶段,这些特性还只是一个想法,还需要讨论,随时都有可能变更
    2014-04-04
  • PHP入门教程之上传文件实例详解

    PHP入门教程之上传文件实例详解

    这篇文章主要介绍了PHP入门教程之上传文件的方法,结合实例形式详细分析了php上传文件的步骤与相关实现技巧,需要的朋友可以参考下
    2016-09-09
  • PHP随机数生成代码与使用实例分析

    PHP随机数生成代码与使用实例分析

    在PHP程序设计中,随机数的生成尤为重要。我们需要用随机数在我们的页面中展示随机记录(比如图片、用户记录、文章ID等)。
    2011-04-04
  • php date与gmdate的获取日期的区别

    php date与gmdate的获取日期的区别

    PHP中的时间有2个格式化函数:date()和gmdate(),在官方的文档中的描述为
    2010-02-02
  • PHP检测一个数组有没有定义的方法步骤

    PHP检测一个数组有没有定义的方法步骤

    在本篇文章里小编给大家分享的是关于PHP检测一个数组有没有定义的方法步骤详解,有需要的朋友们参考下。
    2019-07-07
  • php操作excel文件 基于phpexcel

    php操作excel文件 基于phpexcel

    最近在工作中需要处理多语言的翻译问题,翻译都是写在excel表格里面。为了处理方便我就保留中文和英文两列。这样需要将这些数据从excel中取出来,然乎保存在excel的数组中,通过使用循环数组将相应的数据放入到数据库中。
    2010-07-07
  • PHP实现视频文件上传完整实例

    PHP实现视频文件上传完整实例

    这篇文章主要介绍了PHP实现视频文件上传的技巧,包含了PHP配置信息的设计及大文件的处理,需要的朋友可以参考下
    2014-08-08

最新评论