PHP後期静的バインディング例を簡単に分析する。

3243 ワード

本論文の例はPHPの後期の静的結合について述べる。皆さんに参考にしてあげます。具体的には以下の通りです。
php 5.3から始まり、phpは後期バインディングという機能を増加させ、継承範囲内で静的呼び出しのクラスを参照するために使用される。
この機能は言語内部の観点から北を「後期静的バインディング」と名付けた。後期バインディングとは、「static」という意味です。現在の方法の存在を定義するクラスとしては解析されず、実際の運転時に計算されるもので、「静的バインディング」にもなります。彼は(静的方法の呼び出しに限定されない)ために使用することができる。
self:の制限self::または_class_を使用して、現在のクラスの静的な参照は、現在の方法のクラスを定義することに依存する。
例:

class A {
  public static function who() {
    echo __CLASS__;
  }
  public static function test() {
    self::who();
  }
}
class B extends A {
  public static function who() {
    echo __CLASS__;
  }
}
B::test(); //A

印刷結果:
A
静的結合の使用法
静的バインディングは、最初に呼び出したクラスをキーワードとして導入することによって制限を回避しようとします。簡単に言えば、このキーワードは上述の中でtest()を呼び出した時に引用するクラスはBであり、Aではない。最終的には、新しいキーワードを引用しないで、予約したstaticキーワードを使うことにしました。
例:

<?php
class A {
  public static function who() {
    echo __CLASS__;
  }
  public static function test() {
    static::who(); //            
  }
}
class B extends A {
  public static function who() {
    echo __CLASS__;
  }
}
B::test();
?>

印刷結果は:
B
後期静的バインディングの処理は、従来全く解決されていなかった静的呼び出しを解決し、他方、静的呼び出しがparentを使用する場合:またはself::呼び出し情報を転送します。

<?php
class A {
  public static function foo() {
    static::who();
  }
  public static function who() {
    echo __CLASS__."
"; } } class B extends A { public static function test() { A::foo(); parent::foo(); self::foo(); } public static function who() { echo __CLASS__."
"; } } class C extends B { public static function who() { echo __CLASS__."
"; } } C::test(); ?>
印刷結果:
A
C
C
例:

<?php
class a {
 static public function test() {
  print get_called_class();
 }
}
class b extends a {
}
a::test();
b::test();
?>

印刷結果:
a.
b
特別声明:get_called_class();クラスの名前を取得する静的な方法で呼び出します。
PHPについてもっと興味のある読者は、本駅のテーマを見てもいいです。「php対象プログラム設計入門教程」、「PHP配列(Aray)操作テクニック大全」、「PHP基本文法入門教程」、「PHP演算と演算子の使い方のまとめ」、「php文字列(string)使い方のまとめ」、「php+mysqlデータベース操作入門教程」および「phpよくあるデータベースの操作技巧のまとめ
本論文で述べたように、皆さんのPHPプログラムの設計に役に立ちますように。