この記事では、PHP でのオブジェクト指向の抽象メソッドと抽象クラス __call clone オブジェクトの使用法を紹介します。その方法を知りたい人は、それを学ぶことができます。
抽象メソッドと抽象クラス
OOP 言語では、クラスは 1 つ以上のサブクラスを持つことができ、各クラスには外部コードがアクセスするためのインターフェイスとして少なくとも 1 つのパブリック メソッドがあります。抽象メソッドは継承を容易にするために導入されています。その使用法を説明する前に、まず抽象クラスと抽象メソッドの定義を見てみましょう。
抽象メソッドとは何ですか?メソッド本体を持たずにクラス内で定義するメソッドは、いわゆるメソッド本体が存在しないことを意味し、メソッドの宣言時に中括弧やその中の内容が存在せず、代わりに括弧が直後に追加されます。宣言するときはメソッド名。数値の末尾に、抽象メソッドを宣言するときはキーワード「abstract」を追加します。例:
コードは次のとおりです | コードをコピー |
抽象関数 fun1(); |
上記の例は、「abstract」によってメソッド本体が変更されていない抽象メソッド「fun1()」と「fun2()」です。抽象メソッドの後にセミコロンがあることを忘れないでください。クラス内のメソッドが抽象メソッドである限り、そのクラスは抽象クラスとして定義する必要があり、また、抽象クラス内にメソッドとメンバーを含めることができ、その抽象クラスも「abstract」キーワードで変更する必要があります。メソッドが抽象メソッドの場合、クラスは抽象クラスとして宣言され、「abstract」で装飾される必要があります。例:
コードは次のとおりです | コードをコピー |
抽象クラスのデモ 抽象関数 fun1(); |
上記の例では、抽象クラス「Demo」が定義され、「abstract」で変更されています。このクラスでは、メンバー属性「$test」、2 つの抽象メソッド「fun1」および「fun2」、および非 Abstract が定義されています。メソッド fun3(); では、抽象クラスをどのように使用するのでしょうか?最も重要な点は、抽象クラスはインスタンス オブジェクトを生成できないため、直接使用できないことです。クラスを介してインスタンス化されたオブジェクトを使用しているため、抽象クラスはインスタンス オブジェクトを生成できません。抽象クラスを宣言するのはどうですか?抽象メソッドをサブクラスのオーバーロードのテンプレートとして使用します。この仕様は、サブクラスが抽象クラスを継承した後、サブクラスのニーズに応じて実装されることを要求します。サブクラスは親クラスのすべての抽象メソッドを実装する必要があります。そうでない場合、サブクラスにまだ抽象メソッドが存在する場合、サブクラスは依然として抽象クラスであり、抽象クラスから継承する必要があるのはなぜでしょうか。いくつかの関数を実装したい場合は、抽象クラスから継承する必要がある場合があります。そうしないと、抽象クラスを継承する場合、そのクラスに抽象メソッドを実装する必要があります。
コードをコピー | |||||||||
抽象クラスのデモ
{
抽象関数 fun2(); |
コードは次のとおりです | コードをコピー |
$demo=新しいデモ(); クラステストはデモを拡張します 関数 fun2() |
//親クラスのすべての抽象メソッドが実装されているため、サブクラスはオブジェクトをインスタンス化できます
コードは次のとおりです | コードをコピー |
$test=新しいテスト(); |
__call は呼び出しエラーを処理します
プログラム開発において、オブジェクトを使用してオブジェクトの内部メソッドを呼び出すときに、呼び出されたメソッドが存在しない場合、プログラムはエラーとなり、プログラムは終了して実行を続行できません。したがって、プログラムがオブジェクト内に存在しないメソッドを呼び出す場合、呼び出されたメソッドと使用されたパラメータが存在しないことを示すプロンプトが表示されますが、この時点ではプログラムは実行を続行することができます。存在しないメソッドを呼び出すと自動的に呼び出されます。
コードは次のとおりです | コードをコピー |
//これはテストクラスであり、属性やメソッドはありません //Testクラスのオブジェクトを生成する //オブジェクトに存在しないメソッドを呼び出す //プログラムはここでは実行されません |
上記の例では次のエラーが発生し、プログラムは実行を続行できません。
致命的なエラー: 未定義メソッド Test::demo() の呼び出し
コードをコピー | |||||||||
//これはテストクラスであり、属性やメソッドはありません
クラステスト
|
コードをコピー | |
クラスの人
{
関数 __construct($name="", $sex="", $age="")
関数say()
//「clone」を使用して、p1 オブジェクトと同じプロパティとメソッドを持つ新しいオブジェクト p2 を複製します。
|
コードは次のとおりです | コードをコピー |
クラスの人 //属性名 $name、性別 $sex、年齢 $age に値を割り当てるコンストラクター パラメーターを定義します //この人は自分の属性を伝える方法で話すことができます //オブジェクトのクローン作成時に自動的に呼び出されるメソッド。クローン作成後に元のオブジェクトの内容を変更したい場合は、__clone()で元の属性とメソッドを書き換える必要があります $p1=新しい人("張三"、"男性"、20歳); $p2=$p1 のクローン; 上記の例の出力: |
私の名前:Zhang San 性別:男性 私の年齢:20歳
私の名前は:偽の張三です 性別:男性 年齢:30歳