ArgumentTypeCoercion
関数のシグネチャやdocblockの型よりも具体的でない型の引数を関数に渡した場合に発生します。
<?php
class A {}
class B extends A {}
function foo(A $a) : void {
takesB($a);
}
function takesB(B $b) : void {}
なぜこれが問題なのか
不正な値で関数を呼び出すと、実行時に致命的なエラーが発生します。
修正方法
takesB
の呼び出しの前に型チェックを追加することができます:
<?php
function foo(A $a) : void {
if ($a instanceof B) {
takesB($a);
}
}
または、foo
の関数シグネチャを変更する権限がある場合は、B
を期待するように変更できます:
<?php
function foo(B $a) : void {
takesB($a);
}
ユーザーノート
+ ユーザーノートを表示する
ユーザーノートについて
PHPマニュアルのように、マニュアルを補足する情報の共有を目的としてます。
- 掲示板ではありません。議論、質問、別のノートへの返信はできません。
- バグや改善要望、または翻訳の Issue は、該当する GitHub リポジトリで報告してください。
- ノートは事前の通知なく削除される場合があります。
- Giscussのコメントシステムを流用しています。そのためノートとしては最適化されてないことをご了承ください。
- 保証されていません。投稿したノートが消失する事やノート機能全体が閉鎖する可能性があります。
- お願い:いいノートにはup voteを、この規約に違反しているノートを見つけた場合は、優しくdown voteしてください。