コンピュータプログラミングにおいて、バインディング時間とは、ソフトウェア内で 2 つのデータまたはコードエンティティ間の関連付けが行われるタイミングを指します。これは、実行開始前または実行後に発生する可能性があります。早期(静的とも呼ばれる)バインディングは、プログラムの実行開始前に発生し、実行中に変更することはできません。後期(動的または仮想とも呼ばれる)バインディングは、プログラムの実行中に発生します。[ 1 ]バインディング時間は、名前、メモリ( mallocなど)、型(リテラルなど)を含むあらゆる種類のバインディングに適用されます。
以下のJavaコードは、両方のバインディング時間を示しています。 メソッドは、foo3 行目の関数宣言に続くコード ブロックに早期にバインドされます。 の呼び出しは、 がインターフェースであるため、そのサブタイプを参照する必要があるため、add遅延バインドされます。 は、、 、またはその他のサブタイプを参照できます。 が参照するメソッドは、実行時までわかりません。ListlistlistLinkedListArrayListListadd
import java.util.List ;public void foo ( List < String > list ) {リスト.add ( "bar" ) ;}遅延静的バインディングは、静的バインディングと動的バインディングの中間に位置するバインディングの一種です。以下のPHPの例をご覧ください。
class A { public static $word = "hello" ; public static function hello () { print self :: $word ; } }class B extends A { public static $word = "bye" ; }B :: hello ();この例では、PHP インタープリタはキーワードをクラスにselfバインドするため、への呼び出しは文字列 "hello" を生成します。のセマンティクスが遅延静的バインディングに基づいていた場合、結果は "bye" になります。A::hello()AB::hello()self::$word
PHP バージョン 5.3 以降では、遅延静的バインディングがサポートされています。[ 2 ] 具体的には、self::$word上記のコードがstatic::$word次のブロックに示すように変更され、キーワードがstatic実行時にのみバインドされる場合、への呼び出しの結果はB::hello()「bye」になります。
class A { public static $word = "hello" ; public static function hello () { print static :: $word ; } }class B extends A { public static $word = "bye" ; }B :: hello ();