この記事の例では、PHP における abstract、final、static の原則と使用法について説明します。参考のために皆さんと共有してください。詳細は次のとおりです。
PHP 5 は、抽象クラスと抽象メソッドをサポートしています。抽象として定義されたクラスはインスタンス化できません。クラス内の少なくとも 1 つのメソッドが抽象宣言されている場合は、クラスを抽象宣言する必要があります。 abstract として定義されたメソッドは、その呼び出しメソッド (パラメーター) を宣言するだけであり、 はその特定の関数実装を定義できません。
#抽象クラスを継承する場合、サブクラスは親クラスのすべての抽象メソッドを定義する必要があります#概要:; さらに、これらのメソッドのアクセス制御は、親クラスのアクセス制御と同じ (またはより緩和された) # である必要があります。たとえば、抽象メソッドが protected として宣言されている場合、サブクラスに実装されたメソッドは protected または public (厳密には private>protected>public) として宣言される必要がありますが、private として定義することはできません。さらに、 メソッドの呼び出し方法は一致する必要があります。つまり、必要なパラメータの型と数が一貫している必要があります。たとえば、サブクラスが親クラスの抽象メソッドの宣言に含まれていないオプションのパラメーターを定義している場合、2 つの宣言の間に競合はありません。これは、PHP 5.4 以降のコンストラクターにも当てはまります。 PHP 5.4 より前のコンストラクター宣言は異なる可能性があります。 #関連する学習に関する推奨事項: PHP プログラミングの入門から熟練度まで
クラス内に抽象メソッドがある場合、このクラスも抽象である必要があります;
<?php abstract class AbstractClass { // 强制要求子类定义这些方法,不定义功能实现 abstract protected function getValue(); abstract protected function prefixValue($prefix); // 普通方法(非抽象方法),子类可以不重写 public function printOut() { print $this->getValue() . "\n"; } } class ConcreteClass1 extends AbstractClass { protected function getValue() { return "ConcreteClass1"; } public function prefixValue($prefix) { return "{$prefix}ConcreteClass1"; } } class ConcreteClass2 extends AbstractClass { //访问方式可以更宽松 public function getValue() { return "ConcreteClass2"; } public function prefixValue($prefix) { return "{$prefix}ConcreteClass2"; } } $class1 = new ConcreteClass1; $class1->printOut(); echo $class1->prefixValue('FOO_') ."\n"; $class2 = new ConcreteClass2; $class2->printOut(); echo $class2->prefixValue('FOO_') ."\n"; ?>
<?php abstract class AbstractClass { // 我们的抽象方法仅需要定义需要的参数 abstract protected function prefixName($name); } class ConcreteClass extends AbstractClass { // 我们的子类可以定义父类签名中不存在的 可选参数 public function prefixName($name, $separator = ".") { if ($name == "Pacman") { $prefix = "Mr"; } elseif ($name == "Pacwoman") { $prefix = "Mrs"; } else { $prefix = ""; } return "{$prefix}{$separator} {$name}"; } } $class = new ConcreteClass; echo $class->prefixName("Pacman"), "\n"; echo $class->prefixName("Pacwoman"), "\n"; ?>
PHP 4 との互換性を保つために、アクセス制御が指定されていない場合、プロパティとメソッドはデフォルトで public になります。 静的メソッドではオブジェクトを呼び出す必要がないため、疑似変数クラス属性またはメソッドを静的として宣言すると、クラスをインスタンス化せずに直接アクセスできるようになります。 。インスタンス化されたクラスのオブジェクトを介して静的プロパティにアクセスすることはできません (ただし、静的メソッドはアクセスできます)。
->
演算子を使用してオブジェクトからアクセスできません。非静的メソッドを静的に呼び出すと、
E_STRICT
他のすべての PHP 静的変数と同様、静的プロパティは式ではなくリテラルまたは定数にのみ初期化できます。したがって、静的プロパティは整数または配列に初期化できますが、別の変数や関数の戻り値に初期化したり、オブジェクトを指すことはできません。
概要:
うわー
以上がPHP における abstract、final、static の原理と使用法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。