PHP における abstract、final、static の原理と使用法の詳細な説明
この記事の例では、PHP における abstract、final、static の原則と使用法について説明します。参考のために皆さんと共有してください。詳細は次のとおりです。
abstract(abstract)
PHP 5 は、抽象クラスと抽象メソッドをサポートしています。抽象として定義されたクラスはインスタンス化できません。クラス内の少なくとも 1 つのメソッドが抽象宣言されている場合は、クラスを抽象宣言する必要があります。 abstract として定義されたメソッドは、その呼び出しメソッド (パラメーター) を宣言するだけであり、 はその特定の関数実装を定義できません。
#抽象クラスを継承する場合、サブクラスは親クラスのすべての抽象メソッドを定義する必要があります#概要:; さらに、これらのメソッドのアクセス制御は、親クラスのアクセス制御と同じ (またはより緩和された) # である必要があります。たとえば、抽象メソッドが protected として宣言されている場合、サブクラスに実装されたメソッドは protected または public (厳密には private>protected>public) として宣言される必要がありますが、private として定義することはできません。さらに、 メソッドの呼び出し方法は一致する必要があります。つまり、必要なパラメータの型と数が一貫している必要があります。たとえば、サブクラスが親クラスの抽象メソッドの宣言に含まれていないオプションのパラメーターを定義している場合、2 つの宣言の間に競合はありません。これは、PHP 5.4 以降のコンストラクターにも当てはまります。 PHP 5.4 より前のコンストラクター宣言は異なる可能性があります。 #関連する学習に関する推奨事項: PHP プログラミングの入門から熟練度まで
クラス内に抽象メソッドがある場合、このクラスも抽象である必要があります;
- 抽象クラス呼び出しメソッドとパラメータのみを宣言できますが、特定の関数実装を定義することはできません;
- 抽象クラスを継承するサブクラスは、抽象クラスのすべての抽象メソッドを実装する必要があります;
- サブクラスに実装された抽象メソッドのアクセス制御は、親クラスのアクセス制御よりも厳しくする必要があります;
- 呼び出しメソッドとメソッドのパラメーターの数サブクラスに実装されるメソッドは、実装されるメソッドと同じである必要があり、一貫性があります。
- 例:
- final 親クラスのメソッドがfinalと宣言されている場合、サブクラスはそのメソッドをオーバーライドできません。クラスがfinal宣言されている場合、そのクラスを継承することはできません。
<?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 になります。 静的メソッドではオブジェクトを呼び出す必要がないため、疑似変数クラス属性またはメソッドを静的として宣言すると、クラスをインスタンス化せずに直接アクセスできるようになります。 。インスタンス化されたクラスのオブジェクトを介して静的プロパティにアクセスすることはできません (ただし、静的メソッドはアクセスできます)。
$this
は静的メソッドでは使用できません。 静的プロパティには、->
演算子を使用してオブジェクトからアクセスできません。非静的メソッドを静的に呼び出すと、
E_STRICT
他のすべての PHP 静的変数と同様、静的プロパティは式ではなくリテラルまたは定数にのみ初期化できます。したがって、静的プロパティは整数または配列に初期化できますが、別の変数や関数の戻り値に初期化したり、オブジェクトを指すことはできません。
概要:
- 疑似変数 $this
- は静的メソッドでは使用できません。
- 静的プロパティには、-> 演算子を使用してオブジェクトからアクセスできません;
非静的メソッドを静的に呼び出すと、 E_STRICT が発生します。 - レベル エラー ;
- 静的プロパティはリテラルまたは定数にのみ初期化できます。式 (変数/オブジェクトではなく関数の戻り値) は使用できません。
変数を使用してクラスを動的に呼び出すことができます。ただし、この変数の値をキーワード self、parent、または static にすることはできません。 うわー
以上がPHP における abstract、final、static の原理と使用法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。
