げっ!Type Hintingで「array」が使えてたのか!
完全に見落としてました。PHP: タイプヒンティング - Manualにはしっかり
タイプヒントは、object型やarray型 (PHP5.1以降) でのみ使用できます。 int および stringのような 通常の型でのタイプヒンティングはサポートされません。
と書かれてますね。。。5.1っていつの話だよ。。。orz
異なる型を渡すとE_RECOVERABLE_ERRORが発生します。以下のサンプルは、E_RECOVERABLE_ERRORを例外に変換して投げるエラーハンドラを作っています。
<?php ini_set('display_errors', 1); error_reporting(E_ALL|E_STRICT); function catch_recoverable_error($errno, $errstr, $errfile, $errline) { switch ($errno) { case E_RECOVERABLE_ERROR: throw new Exception($errstr); break; } } set_error_handler('catch_recoverable_error'); function acceptStdClass(Traversable $value) { echo get_class($value) . '<br>'; } function acceptArray(array $value) { foreach ($value as $value) { echo $value . '<br>'; } } $value = new stdClass(); try { acceptStdClass($value); } catch (Exception $e) { echo '<p>' . $e->getMessage() .'</p>'; } echo '<hr>'; try { acceptArray(array(1, 2, 3)); } catch (Exception $e) { echo '<p>' . $e->getMessage() .'</p>'; } echo '<hr>'; try { acceptArray('string'); } catch (Exception $e) { echo '<p>' . $e->getMessage() .'</p>'; } echo '<hr>'; try { acceptArray(123); } catch (Exception $e) { echo '<p>' . $e->getMessage() .'</p>'; } echo '<hr>';