foreach
注意: foreachは、'@' によりエラーメッセージ出力を抑制する機能をサポートしていません。
個人的には、この仕様が気に入りません。であれば、せめてE_NOTICEにして欲しい。
という訳でダメ駄目パッチを作ってみた。よい子のみんな、決して真似しないでね。
--- php-4.4.0,orig/Zend/zend_execute.c 2005-07-12 14:28:43.000000000 +0900 +++ php-4.4.0/Zend/zend_execute.c 2005-07-12 14:28:43.000000000 +0900 @@ -2393,7 +2393,7 @@ /* probably redundant */ zend_hash_internal_pointer_reset(fe_ht); } else { - zend_error(E_WARNING, "Invalid argument supplied for foreach()"); + zend_error(E_NOTICE, "Invalid argument supplied for foreach()"); /* JMP to the end of foreach */ EX(opline) = op_array->opcodes+EX(opline)[1].op2.u.opline_num; continue; @@ -2415,7 +2415,7 @@ fe_ht = HASH_OF(array); if (!fe_ht) { - zend_error(E_WARNING, "Invalid argument supplied for foreach()"); + zend_error(E_NOTICE, "Invalid argument supplied for foreach()"); EX(opline) = op_array->opcodes+EX(opline)->op2.u.opline_num; continue; } else if (zend_hash_get_current_data(fe_ht, (void **) &value)==FAILURE) {
そもそも、foreachに配列以外の情報を突っ込んでいる時点でダメ駄目なのだが。