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

PHP匿名クラス


はじめに

名前が示すように、匿名クラスは名前のないクラスです。これは、1回限りの使用であり、クラスをその場で定義する必要がある場合に使用します。匿名クラスの機能は、PHP7バージョンから導入されました。

匿名クラスの定義は、その結果がそのクラスのオブジェクトである式の中にあります。 新しいクラスで定義されています 構文は次のとおりです

構文

<?php
$obj=new class {
   public function sayhello(){
      echo "Hello World";
   }
};
$obj->sayhello();
?>

匿名クラスは、通常のクラスが実行できるすべてのことを実行できます。つまり、別のクラスを拡張したり、インターフェイスを実装したり、トレイトを使用したりできます

次のコードでは、匿名クラスがparentclassを拡張し、parentinterfaceを実装します

<?php
class parentclass{
   public function test1(){
      echo "test1 method in parent class\n";
   }
}
interface parentinterface{
   public function test2();
}
$obj=new class() extends parentclass implements parentinterface {
   public function test2(){
      echo "implements test2 method from interface";
   }
};
$obj->test1();
$obj->test2();
?>

出力

出力は以下のとおりです-

test1 method in parent class
implements test2 method from interface

ネストされた匿名クラス

匿名クラスは、他のクラスメソッドの本体内にネストできます。ただし、そのオブジェクトは、外部クラスのプライベートメンバーまたは保護されたメンバーにアクセスできません

<?php
class testclass{
   public function test1(){
      return new class(){
         public function test2(){
            echo "test2 method of nested anonymous class";
         }
      };
   }
}
$obj2=new testclass();
$obj2->test1()->test2();
?>

出力

上記のコードは次の結果を生成します-

test2 method of nested anonymous class

匿名クラスの内部名

PHPパーサーは、内部使用のために匿名クラスに一意の名前を付けます

<?php
var_dump(get_class(new class() {} ));
?>

出力

これにより、次のような出力が生成されます-

string(60) "class@anonymous/home/cg/root/1569997/main.php0x7f1ba68da026"

  1. PHPのget_class_methods()関数

    get_class_methods()関数は、クラスメソッドの名前を取得します。 name_of_classで指定されたクラスに定義されたメソッド名の配列を返します。エラーの場合、NULLを返します。 構文 get_class_methods(class) パラメータ name_of_class −クラス名。必須です! 戻る get_class_methods()関数は、name_of_classで指定されたクラスに対して定義されたメソッド名の配列を返します。エラーの場合、NULLを返します。 例 以下は例です- <?php class Demo {   &n

  2. PHPのclass_exists()関数

    PHPのclass_exists()関数は、クラスが定義されているかどうかをチェックします。クラスが定義済みクラスの場合はTRUEを返し、そうでない場合はFALSEを返します。 構文 class_exists(class, autoload) パラメータ クラス −クラスの名前。 自動読み込み −デフォルトで__autoloadを呼び出すかどうか 戻る class_exists()関数は、クラスが定義されたクラスの場合はTRUEを返し、そうでない場合はFALSEを返します。 例 以下は例です- <?php if (class_exists('Demo'