PHP で static:: と new static() の間の静的バインディングを形成する方法
#PHP::late の static と new static()
1.parent、 self, $this, __CLASS__
class A {} class B extends A{ parent::(public|protected)(静态方法|静态变量) ===> parent永远是A self::(public|protected)(静态方法|静态变量) ===> self永远是B $this->(public|protected)(非静态方法|非静态变量) ===> $this永远是B的是实例化对象 __CLASS__ ===> 永远是B } class C extends B{ parent::(public|protected)(静态方法|静态变量) ===> parent永远是B self::(public|protected)(静态方法|静态变量) ===> self永远是C $this->(public|protected)(非静态方法|非静态变量) ===> $this永远是C的是实例化对象 __CLASS__ ===> 永远是C }
2.static::
static キーワードは次の機能を実現できます: 1 呼び出しクラスの静的メソッドには遅延静的バインディング効果があります; 2 クラスの静的プロパティの呼び出しには遅延静的バインディング効果があります; 3 クラスの非静的メソッドの呼び出し遅延静的バインディング効果はありません ;4 注: 非静的プロパティは呼び出すことができません;class A { private static function foo() { echo "A success!\n"; } public function test() { $this->foo(); } } class B extends A { } class C extends A { private static function foo() { echo "C success!\n"; } } $b = new B(); $b->test();//A success! $c = new C(); $c->test();//A success!
class A { private static function foo() { echo "A success!\n"; } public function test() { static::foo(); } } class B extends A { } class C extends A { private static function foo() { echo "C success!\n"; } } $b = new B(); $b->test();//A success! $c = new C(); $c->test();//A无法调用C里的私有foo方法 //将C的foo改成非private(public|protected)就可以解决 class A { private static function foo() { echo "A success!\n"; } public function test() { static::foo(); } } class B extends A { } class C extends A { public static function foo() { echo "C success!\n"; } } $b = new B(); $b->test();//A success! $c = new C(); $c->test();//C success!
class A { public static function foo() { static::who(); } public static function who() { echo __CLASS__."\n"; } } class B extends A { public static function test() { A::foo(); parent::foo(); self::foo(); } public static function who() { echo __CLASS__."\n"; } } class C extends B { public static function who() { echo __CLASS__."\n"; } } C::test(); A =>A::foo()的结果 C =>parent::foo()能走到A的foo,里面static::who找C::who C =>self::foo()能走到B的foo,B继承A,走到A的foo,里面static::who找C::who class A { protected static function foo() { static::who(); } protected static function who() { echo __CLASS__."\n"; } } class B extends A { public static function test() { A::foo(); parent::foo(); self::foo(); } protected static function who() { echo __CLASS__."\n"; } } class C extends B { protected static function who() { echo __CLASS__."\n"; } } C::test(); //A C C,解释同上 class A { public static function foo() { static::who(); } private static function who() { echo __CLASS__."\n"; } } class B extends A { public static function test() { A::foo(); parent::foo(); // self::foo(); } private static function who() { echo __CLASS__."\n"; } } class C extends B { private static function who() { echo __CLASS__."\n"; } } C::test(); //A =>A::foo()的结果 //报错 A不可C的私有方法who => parent::foo()能走到A的foo,里面static::who找C::who,C的who只能在C里调用,不能在A里调用 //报错 A不可C的私有方法who => self::foo()能走到B的foo,B继承A,走到A的foo,里面static::who找C::who,C的who只能在C里调用,不能在A里调用
3. new static()
//new self()与new static()的区别,官网例子如下: class A { public static function get_self() { return new self(); } public static function get_static() { return new static(); } } class B extends A {} echo get_class(B::get_self()); // A echo get_class(B::get_static()); // B echo get_class(A::get_static()); // A
PHP ビデオ チュートリアル >>」
以上がPHP で static:: と new static() の間の静的バインディングを形成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPLate の静的バインディング: 従来のプログラミングの考え方を打ち破る技術的なヒント はじめに: 従来のプログラミングの考え方では、通常、コンパイル時にメソッドとプロパティの呼び出しを決定します。しかし、動的呼び出しが必要な場合には、この方法は制限的で不合理であるように見えます。 。 フレキシブル。 PHP は、従来のプログラミングの考え方を打ち破り、メソッドとプロパティの動的バインディングに便利な「遅延静的バインディング」という強力な機能を提供します。この記事では、具体的なコード例を通して L を紹介します。

はい!コンパイラは、メソッドの実行に使用されるオブジェクトを認識すると、そのオブジェクトへの参照を静的にバインドできます。たとえば、静的変数、プライベート変数、および最終変数は静的バインディングを使用します。実行時にオブジェクト認識が必要な場合は、動的バインディングを使用します。メソッドのオーバーライドは動的バインディングのケースです。メソッドのオーバーロードは静的バインディングのケースです。

PHPLate 静的バインディングを使用してコードの再利用性を向上させる方法 はじめに: PHP 開発では、コードの再利用は開発効率と保守性を向上させる重要な要素の 1 つです。 PHP は、コードの再利用性を実現するためのさまざまな手法を提供します。重要な手法の 1 つは、遅延静的バインディングの使用です。この記事では、Late static binding の概念、利点、実際の開発における応用について紹介します。 1. Late static binding の概要 Late static binding とは、静的メソッドやプロパティの呼び出し方法を呼び出し時のコンテキストに基づいて動的に決定する方式のことです。存在する

PHPLate 静的バインディングを通じて効率的でスケーラブルなコード構造を作成する 要約: 大規模なプロジェクトでは、コード構造のスケーラビリティと効率性が非常に重要です。 PHPLate 静的バインディングは、保守と拡張が簡単なコードの構築に役立つ強力な機能です。この記事では、PHPLate 静的バインディングの概念を紹介し、特定のコード例を使用して、それを使用して効率的でスケーラブルなコード構造を構築する方法を説明します。はじめに: 会社の事業が発展し、拡大し続けるにつれて、プロジェクトの規模も徐々に拡大していきます。このようにして

PHPLate 静的バインディングの技術的秘密を明らかにするには、特定のコード サンプルが必要です。近年、PHP は一般的に使用されるサーバーサイド スクリプト言語として開発者に歓迎されています。 PHP 言語の発展に伴い、より多くのプログラミング手法や機能が PHP に追加されてきました。その 1 つが後期静的バインディングです。遅延静的バインディングとは、継承関係において、サブクラスが親クラスの静的メソッドとプロパティをオーバーライドして呼び出すことができることを意味します。この継承関係により、コードの柔軟性とスケーラビリティが大幅に向上します。それで、させてください

バインディングは、メソッド呼び出しとメソッドの実際の実装の間にリンクを作成するメカニズムです。 Java のポリモーフィズムの概念によれば、オブジェクトはさまざまな形式を持つことができます。オブジェクトの形式はコンパイル時と実行時に解決できます。メソッド呼び出しとメソッド実装の間のリンクがコンパイル時に解決される場合は静的バインディングと呼ばれ、実行時に解決される場合は動的バインディングと呼ばれます。動的バインディングはオブジェクトを使用してバインディングを解決しますが、静的バインディングはクラスとフィールドの型を使用します。老紳士。いいえ。キーの静的バインディング 動的バインディング 1 コンパイル時の基本解決 実行時に解決 2 解決メカニズム 静的バインディングはクラスとフィールドの型を使用します 動的バインディングはオブジェクトを使用してバインディングを解決します 3 オーバーロードの例は静的バインディングの例です メソッドのオーバーロード 書き込みは次の例です動的バインディング 4. メソッドのタイプはプライベート、

PHPLate 静的バインディング: コード継承を最適化するための技術ツール 背景の紹介: オブジェクト指向プログラミングでは、継承は一般的なコード再利用テクノロジです。継承を通じて、新しいクラスを作成し、既存のクラス (親クラスまたは基本クラスと呼ばれる) からプロパティとメソッドを継承できます。このようにして、コードの重複を減らし、コードの保守性とスケーラビリティを向上させることができます。しかし、継承ではよく問題が発生します。サブクラスで親クラスの静的メソッドを呼び出すと、静的メソッドのバインドがコンパイル時に完了するため、サブクラスが静的メソッドを呼び出します。
