PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHP後期静的バインディング


はじめに

PHPでのレイト静的バインディングのこの機能は、静的継承で呼び出されたクラスを参照するために使用されます。静的メソッドが呼び出されると、クラスの名前はスコープ解決演算子(::)で付加されますが、他のインスタンスメソッドの場合は、オブジェクトの名前を使用して呼び出します。 static ::は、メソッドが定義されているクラスを使用して解決されるのではなく、実行時情報を使用して計算されます。現在のクラスへの静的参照は、関数が定義された場所ではなく、関数が属するクラスを使用して解決されます

次のコードでは、親クラスがself::プレフィックスを使用して静的ethodを呼び出します。子クラスで呼び出されたときの同じメソッドは、解決されないため、子クラス名を参照しません

<?php
class test1{
   public static $name="Raja";
   public static function name(){
      echo "name of class :" . __CLASS__;
   }
   public static function getname(){
      self::name();
   }
}
class test2 extends test1{
   public static function name(){
      echo "name of class :" . __CLASS__;
   }
}
test2::getname();
?>

出力

結果は、再び期待どおり、親クラスの名前が返されることを示しています

name of class :test1

self::の代わりにstatic::を使用すると、実行時に遅延バインディングが作成されます

<?php
class test1{
   public static function name(){
      echo "name of class :" . __CLASS__;
   }
   public static function getname(){
      static::name();
   }
}
class test2 extends test1{
   public static function name(){
      echo "name of class :" . __CLASS__;
   }
}
test2::getname();
?>

上記のコードは、期待どおりに子クラスの名前を返すようになりました

出力

name of class :test2

非静的コンテキストでのstatic::の使用

親のプライベートメソッドは子にコピーされるため、そのスコープは引き続き親になります

<?php
class test1{
   private function name(){
      echo "name of class :" . __CLASS__ ."\n";
   }
   public function getname(){
      $this->name();
      static::name();
   }
}
class test2 extends test1{
   //
}
$t2=new test2();
$t2->getname();
?>

出力

出力には次の結果が表示されます

name of class :test1
name of class :test1

ただし、親メソッドがオーバーライドされると、そのスコープが変更されます

class test3 extends test1{
   private function name() {
      /* original method is replaced; the scope of name is test3 */
   }
}
$t3 = new test3();
$t3->name();

出力

出力には次の例外が表示されます

PHP Fatal error: Uncaught Error: Call to private method test3::name() from context ''
からプライベートメソッドtest3::name()を呼び出します
  1. PHPのインターフェースを説明します。

    この記事では、PHPオブジェクト指向プログラミングで最も重要な構造パターンの1つであるPHPインターフェースを利用する方法を理解します。 インターフェイスを使用すると、特定のメソッドの実装方法の複雑さや手順を含めることなく、クラスが実行する必要のあるパブリックメソッドを示すプログラムを作成できます。これは、インターフェイスがメソッド名と引数を定義できるが、メソッドの内容は定義できないことを意味します。インターフェイスを実装するクラスはすべて、インターフェイスで定義されたすべてのメソッドを実装する必要があります。 インターフェイスはクラスと同様に特徴付けられますが、宣言内のクラスフレーズを置

  2. PHPの抽象クラスを説明します。

    PHP5には、オブジェクト指向モデルが付属しています。オブジェクト指向モデルの概念には、クラス、オブジェクト、カプセル化、ポリモーフィズム、抽象クラスと最終クラス、メソッド、インターフェイス、継承などがあります。この記事では、 抽象クラスと、PHPのオブジェクト指向技術に関連する機能について説明します。また、いくつかの例とともに抽象クラスの実装について学習します。 しかし、深く掘り下げる前に、抽象クラスを定義する方法を学びましょう。 クラスの名前にabstractキーワードを付けることで、クラスをabstractとして宣言できます。定義は非常に明確で、抽象メソッドを含むクラスは抽象クラ