そこで、このような情報が表示されないように、foreach を使用する際にパラメータの型変換を強制的に行うようにします。
foreach((array)$arr as $key => $value) ;
こうして順調に進んでいたのですが、数日前に突然問題が発生しました。型をキャストした後、オブジェクト メソッドを通常どおり呼び出すことができなくなります。
コードをコピー コードは次のとおりです:
クラスサービスはIteratorを実装します{
function __construct($service_define,$filter=null){
$this->iterator = new ArrayIterator($service_define['list'] );
$this->filter = $filter;
$this->valid();
関数 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;
$current = $this ->iterator->current();
if($current){
$this->current_object = new Sameple($current);
戻り値;
}
}
戻り値
}
}
クラス Sameple{
var $class_name = null) {
$this->class_name = $class_name;
}
function show(){
echo $this->class_name,'
'; >}
}
$servicelist = array(
'list' => array(
'最初',
'2 番目',
'3 番目',
' 4 番目',
),
);
$ser = new service($servicelist);
foreach ($ser as $s) {
$s->show();
}
/*
//エラーレポートを実行するコードは、$ser
foreach ((array)$ser as $s) {
$s の強制型変換操作を使用します。 -> ;show();
}*/
この問題の理由は、foreach が配列だけでなく、Iterator インターフェイスを実装するクラスも走査できることです。
以前は配列の状況だけを意識していて、Iterator インターフェースを実装するクラスの状況を無視していました。今後も必ず注目していきます。
順番に覚えてください。