そこで、このような情報が表示されないように、foreach を使用する際にパラメータの型変換を強制的に行うようにします。
foreach((array)$arr as $key => $value);ずっと安全でした。 さて、つい数日前、突然問題が発生しました。型をキャストした後、オブジェクト メソッドを通常どおり呼び出すことができなくなります。
コードをコピー コードは次のとおりです:
クラスサービスはIteratorを実装します{
function __construct($service_define,$filter=null){
$this->iterator = new ArrayIterator ($service_define ['list']);
$this->filter = $filter;
}
関数 current(){
return $this->current_object;
パブリック関数 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 -> フィルター()){
}else{
$this->iterator->
}
プライベート関数 filter(){
$ current = $ this->iterator->current();
if($current){
$this->current_object = new Sameple($current){
return true; }
}
return false;
}
}
class Sameple{
var $class_name = null) {
$this->class_name = $class_name; ){
echo $this->class_name,'
'
}
}
$servicelist = array(
'list' => array(
'最初',
'二番目',
'3 番目' ,
'4 番目',
),
);
$ser = 新しいサービス($servicelist)
foreach ($ser として $s) {
$s->show(); *
/ /エラーを報告するコードは、$ser
foreach ((array)$ser as $s) {
$s->show()
}*/
で強制的な型変換操作を使用します。この問題が発生する理由 問題は、foreach が配列だけでなく、Iterator インターフェイスを実装するクラスも走査できることです。
私は以前は配列の状況のみに注目していて、Iterator インターフェースを実装するクラスの状況を無視していました。今後も間違いなく注目していきます。
順番にマークされます。
http://www.bkjia.com/PHPjc/322584.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/322584.html
技術記事
したがって、このような情報が表示されないようにするために、foreach を使用するときは次のようになります。 foreach((array)$arr as $key = $value); .