遅延静的バインディングについて、それを解決する方法
Jun 13, 2016 pm 01:36 PM
class
function
self
static
後期静的バインディングについて
後期静的バインディングについて PHP のマニュアルを読みましたが、元のアドレスは http://cn2.php.net/manual/zh/ language.oop5.late です。 -static-bindings.php
4 番目の例
- PHP コード
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> <?php 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
C
C
呼び出されたとき 親::foo() と self::foo() のときにクラス C の who() が呼び出されるのはなぜですか?
どなたか説明していただけますか、ありがとうございます。
-----解決策--------------------------------
静的演算子の説明:
遅延静的バインディングは、ランタイムによって最初に呼び出されたクラスを表すキーワードを導入することで制限を回避しようとします。
最初に呼び出されるクラスは C
A::foo(); 呼び出されるメソッドはクラス A です、これは理解されています
self::foo(); // この self は実はCクラス。わかりますか? C::test() C は B の test() メソッド
parent::foo(); // self::who() の代わりに static::who(); を継承します。このメソッドによって呼び出される現在のクラスは、クラス C の foo() メソッドです
おそらく、C の who() メソッドがクラス A で呼び出されない理由をまだ理解していないかもしれません。これは特別な理由によるものです。親子関係の性質。遅延静的バインディングは、特にサブクラスと親クラスの間で継承されたメソッドの問題を解決するために登場しました。
------解決策---------
マニュアルは非常に分かりやすいですね?
-------------------------------------------------- ----
「遅延バインディング」とは、static:: が現在のメソッドが定義されているクラスに解析されず、実際の実行時に計算されることを意味します。静的メソッドの呼び出し (ただし、それに限定されない) に使用できるため、「静的バインディング」とも呼ばれます。
----------------------------------------------- --- --------
#1 は小さな問題があると言いました
- PHP コード
self::foo(); // この self は実際には C クラスです。わかりますか? C::test() C は B の test() メソッドを継承します <div class="clear"></div>
ログイン後にコピー
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

人気の記事
レポ:チームメイトを復活させる方法
3週間前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.説明されたエネルギー結晶と彼らが何をするか(黄色のクリスタル)
1週間前
By 尊渡假赌尊渡假赌尊渡假赌
ハローキティアイランドアドベンチャー:巨大な種を手に入れる方法
3週間前
By 尊渡假赌尊渡假赌尊渡假赌
スプリットフィクションを打ち負かすのにどれくらい時間がかかりますか?
3週間前
By DDD

人気の記事
レポ:チームメイトを復活させる方法
3週間前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.説明されたエネルギー結晶と彼らが何をするか(黄色のクリスタル)
1週間前
By 尊渡假赌尊渡假赌尊渡假赌
ハローキティアイランドアドベンチャー:巨大な種を手に入れる方法
3週間前
By 尊渡假赌尊渡假赌尊渡假赌
スプリットフィクションを打ち負かすのにどれくらい時間がかかりますか?
3週間前
By DDD

ホットな記事タグ

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

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

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

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

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

ホットトピック
Gmailメールのログイン入り口はどこですか?
7302
9


Java チュートリアル
1622
14


CakePHP チュートリアル
1342
46


Laravel チュートリアル
1259
25


PHP チュートリアル
1206
29



e からの NameResolutionError(self.host, self, e) の理由とその解決方法

SpringBoot がカスタム クラスローダーを通じてクラス ファイルを暗号化および保護する方法
