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

在PHP编程中,遇到一个关于foreach循环的问题,由于习惯性地对变量进行强制类型转换为数组,导致在迭代实现Iterator接口的类时出现问题,无法正常调用对象方法。博客详细解释了这个问题的原因,即foreach不仅可以遍历数组,还可以直接遍历实现了Iterator接口的类。通过这个案例,作者提醒开发者在处理类似情况时要注意接口的特性,避免类似的错误发生。
摘要由CSDN通过智能技术生成

所以,为了防止这样的信息出现,我使用foreach的时候,都会把参数进行强制类型转换,形势如下:

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

这样做一直相安无事,就在前几天,突然出现了问题。我强制类型转换以后不能正常的调用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执行强制类型转换操作

foreach ((array)$ser as $s) {

$s->show();

}*/

之所以出现这样的问题就是,foreach不但可以遍历数组,还可以遍历实现了Iterator接口的类。

我以前只注意到了数组的情况,把实现了Iterator接口的类的情况给忽略了。以后一定会注意。

依次为记。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值