BK网络学院

首页搜索登录
首页业界网页平面多媒体程序数据库办公工具服务器系统网络安全站长认证壁纸
加入收藏 | 网站地图 | | RSS | WAP
你好,游客 登录 注册 搜索

foreach参数强制类型转换需注意的问题

[日期:2010-12-10] 作者: 来源: [字体: ]

我使用foreach的时候,参数如果不是数组类型,都会把参数进行强制类型转换,否则会出现类似"Warning: Invalid argument supplied for foreach() in XXX"warning信息。

转换方法如下:

foreach((array)$arr as $key => $value);

但是这种转换方法在参数是Iterator接口的类的时候就会出现问题了。你会发现强制类型转换以后就不能调用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 

收藏 推荐 打印 | 录入:blue1000 | 阅读:
本文评论   查看全部评论 (1)
表情: 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事/刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款
第 1 楼
* 匿名 发表于 2016/12/24 19:00:47
http://www.blue1000.com/bkhtml/c19/2013-02/71076.htm 青年志愿者宣传口号 http://www.blue1000.com/show/18192.html 历届奥运会口号大全 http://www.blue1000.com/show/18191.html