PHP、私たち皆が知っているように、非常に緩やかにタイプされています。この言語では、関数のパラメータやクラス変数の型を指定する必要はありません。これは強力な機能です。PHPで間違った型を使用しないようにするにはどうすればよいですか?
場合によっては、スクリプトのデバッグに苦労することもあります。たとえば、ある種類のオブジェクトを異なる種類のオブジェクトが必要なメソッドに渡すと、渡されたオブジェクトに対して特定の変数/メソッドが存在しないというエラーメッセージが表示されることがあります。これらの状況はほとんど迷惑です。より厄介な問題は、あるオブジェクトを間違ったクラスのオブジェクトで初期化し、後でスクリプトの実行時まで「間違ったオブジェクト」が使用されないようにすることです。この場合、元の引数を渡したときよりもずっと後でエラーが発生します。
私が渡したものには、特定のメソッドや変数がない、または使用するオブジェクトに渡されたスクリプトの実行の後半まで待たなければならないという不満の代わりに、エラーメッセージが表示されます間違ったタイプのオブジェクトを指定した場所で、オブジェクトのタイプが間違っているか互換性がないと不平を言っています。
どのようにこれらの状況をコードで処理しますか?互換性のないタイプをどのように検出しますか?スクリプトに型チェックを導入して、わかりやすいエラーメッセージを得る方法を教えてください。
また、Phpで継承を考慮しながらこれをすべて行う方法はありますか?考えてみましょう:
<?php
class InterfaceClass
{
#...
}
class UsesInterfaceClass
{
function SetObject(&$obj)
{
// What do I put here to make sure that $obj either
// is of type InterfaceObject or inherits from it
}
}
?>
次に、このコードのユーザーが自分の具体的なクラスとインターフェイスを実装:
<?php
class ConcreteClass extends InterfaceClass
{
}
?>
私はConcreteClassインスタンス、および将来のすべて、不明なユーザー定義オブジェクトは、また、許容可能になりたいですSetObjectに。正しいタイプをチェックする際に、これをどのようにして許可しますか?
instanceofは便利です。それを虐待しないことを忘れないでください。 –