作业帮 > PHP > 教育资讯

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

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/12 03:11:28 PHP
foreach参数强制类型转换需注意的问题[1]
foreach参数强制类型转换需注意的问题[1]PHP
【BK网络学院 - PHP】
我使用foreach的时候,参数如果不是数组类型,都会把参数进行强制类型转换,否则会出现类似"Warning: Invalid argument supplied for foreach() in XXX"warning信息。

转换方法如下:

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

但是这种转换方法在参数是Iterator接口的类的时候就会出现问题了。你会发现强制类型转换以后就不能调用object的方法了。下面是例子:


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,'
';
}
}

$servicelist = array(
'list' => array(
'first',
'second',
'third',
'fourth',
),
);
$ser = new service($servicelist);
foreach ($ser as $s) {
$s->show();
}
/*
//执行报错的代码 使用了将$ser执行强制类型转换操作
foreachPHP