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

PHPクラスの抽象化


はじめに

オブジェクト指向プログラミングでは、抽象クラスはインスタンス化できるクラスです。つまり、そのようなクラスのオブジェクトを宣言することはできません。 PHPは、バージョン5.0以降のabstarctクラスの概念をサポートしています

abstractキーワードで定義されたクラスは、抽象クラスになります。さらに、少なくとも1つの抽象メソッドを含むクラスも抽象と見なされます。

構文

<?php
class testclass{
   //
}
?>

このクラスのオブジェクトを作成しようとすると、PHPパーサーは次のようにエラーをスローします-

$a=new testclass();
PHP Fatal error: Uncaught Error: Cannot instantiate abstract class testclass

抽象メソッド

抽象メソッドは、そのシグネチャ、つまり、可視性、引数、および型ヒント付きの戻り型のみを宣言し、機能はありません。このような抽象クラスを継承するクラスは、すべての抽象メソッドをオーバーライド(定義を提供)する必要があります。子クラスの対応するメソッドは、親クラスと同じシグネチャを保持する必要があります。子クラスがこの条件を満たさない場合、PHPパーサーは例外をスローします。抽象クラスを拡張するクラスをインスタンス化できるようになったため、具象クラスと呼ばれます

次の例では、親クラスに2つの抽象メソッドがあり、そのうちの1つだけが子クラスで再定義されます。これにより、次のようなエラーが発生します-

<?php
abstract class testclass{
   abstract function test1();
   abstract function hello();
}
class myclass extends testclass{
   function test1(){
      echo "Overrides parent test method";
   }
}
$a=new myclass();
?>

出力

以下はエラーメッセージです

PHP Fatal error: Class myclass contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (testclass::hello)

引数付きの抽象メソッド

抽象メソッドが引数で定義されている場合、同じ数の引数を持つ子クラスでオーバーライドする必要があります

次の例では、親クラスの抽象メソッドに2つの引数があります。子クラスも2つの引数で同じ関数を定義します

<?php
abstract class testclass{
   abstract function hello($name, $age);
}
class myclass extends testclass{
   function hello($name, $age){
      echo "My name is $name and my age is $age";
   }
}
$a=new myclass();
$a->hello("Ravi",20);
?>

出力

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

My name is Ravi and my age is 20

  1. C#の抽象化とは何ですか?

    抽象化とカプセル化は、オブジェクト指向プログラミングの関連機能です。抽象化により、関連情報を可視化でき、カプセル化により、プログラマーは必要なレベルの抽象化を実装できます。 抽象化は、C#の抽象クラスを使用して実現できます。 C#を使用すると、インターフェイスの部分的なクラス実装を提供するために使用される抽象クラスを作成できます。派生クラスがそれを継承すると、実装が完了します。抽象クラスには、派生クラスによって実装される抽象メソッドが含まれています。派生クラスには、より特殊な機能があります。 重要なポイントは次のとおりです- 抽象クラスのインスタンスを作成することはできません

  2. Javaの抽象クラス

    宣言にabstractキーワードを含むクラスは、abstractクラスと呼ばれます。 抽象クラスには、抽象メソッド、つまり本体のないメソッドが含まれる場合と含まれない場合があります(public void get();) ただし、クラスに少なくとも1つの抽象メソッドがある場合、そのクラスは抽象として宣言する必要があります。 クラスが抽象として宣言されている場合、インスタンス化することはできません。 抽象クラスを使用するには、それを別のクラスから継承し、そのクラスに抽象メソッドの実装を提供する必要があります。 抽象クラスを継承する場合は、その中のすべての抽象メソッドに実装を提供する必要がありま