PHP の継承モデルに関する長年の問題は、親クラスで拡張クラスの最終状態を参照することが難しいことです。これは PHP5.3 より前に発生します
1php
2 3class ParentBase {
4 5静的 $property='親値';
6 7 public 静的 関数 render( ) {
8 9 11 }12 13 }
14 15
クラス子孫extends
ParentBase { 16 17 static $property
= '子孫の値' ;1819}20 21
echo Descendant::
render();22 この例では、self キーワードが render() メソッドで使用されており、ParentBase を参照しています。 Descendant クラスではなくクラスです。 ParentBase::render() メソッドで $property の最終値にアクセスする方法はありません。 self キーワードは実行時ではなくコンパイル時にスコープを決定するためです。この問題を解決するために、PHP5.3 ではこの問題が修正され、サブクラス内の render() メソッドの役割を再指定する必要がありました。 遅延静的バインディング関数を導入すると、コードに示すように、static スコープ キーワードを使用してクラスのプロパティまたはメソッドの最終値にアクセスできます。 1
php
class ParentBase { 4
5 静的 $property
='親値'; 関数 render() { 8 9
戻る 静的:: $プロパティ;1011 }
12 13 }14 15 クラス子孫extendsParentBase {
16 17
static $ property
='子孫の値'; 18
19}20 21 echo Descendant::r ender();22 静的スコープを使用して、PHP にすべてのプロパティ値を検索させます。最終クラス。この遅延バインディング動作に加えて
上記では、PHP における継承と遅延静的バインディングの問題をその側面も含めて紹介しましたが、PHP チュートリアルに興味のある友人に役立つことを願っています。