目次
final
static
抽象クラスabstract class
1.抽象クラスは具体的な実装の標準を提供しますが、インターフェイスは純粋なテンプレートです。インターフェイスは関数のみを定義し、実装内容は定義しません。インターフェースはキーワードinterfaceで宣言されます。
(2) インターフェース実装クラスと抽象クラスのサブクラスの両方が、宣言された抽象メソッドを実装する必要があります。
ホームページ バックエンド開発 PHPチュートリアル PHPにおけるstatic、final、interface、abstractの違い

PHPにおけるstatic、final、interface、abstractの違い

Jul 05, 2018 am 11:19 AM

この記事では主に、PHP における static、final、interface、abstract の違いを紹介します。一定の参考値があります。ここで共有します。必要な友人は参考にしてください。

final

親クラスのメソッドがfinalと宣言されている場合、サブクラスはそのメソッドをオーバーライドできません。クラスがfinal宣言されている場合、そのクラスを継承することはできません。

注: プロパティを Final として定義することはできません。final として定義できるのはクラスとメソッドのみです。

static

静的変数には、ローカル変数またはグローバル変数があります。プログラムセグメントが実行されても、静的変数は消えません。メモリ内にまだ存在しており、次回定義されます。これは以前の値のままです。再帰またはサブ関数で以前の値を保持するためによく使用されます。変数やメソッドの定義に使用できます。これはシングルトン モードでも使用されます (

1)。一般に、静的属性はクラスのパブリック データを保存するために使用されます。

2. 静的メソッド内でアクセスできるのは、このクラスと親クラスのプロパティを含む静的プロパティのみです。

#3. 静的メンバーは次のとおりです。オブジェクトをインスタンス化せずにアクセスします

4. このクラス内の静的プロパティにアクセスするには、self または static キーワードを使用します。続く変数には、self::$a または static::$a

# のように、$ が含まれている必要があります。 ##5. 親クラスにアクセスする 静的属性にはparentを使用します (parent::$name

6. クラス外の静的変数またはメソッドにアクセスする場合は、インスタンス化せずにクラス名を使用して直接アクセスします) 。例: Me::$pan および Me::abc()

abstract

抽象クラスabstract class

1.抽象クラスとは、クラスと抽象メソッド(クラスメソッドの関数キーワードの前に抽象キーワード)の前に抽象キーワードを追加したクラスを指します。

2 .抽象クラスは直接インスタンス化できません。抽象クラスは、サブクラスに必要なメソッドのみを定義 (または部分的に実装) します。サブクラスは、抽象クラスを継承し、抽象クラス内のすべての抽象メソッドを実装することによって、抽象クラスを具体化できます。

3.サブクラスをインスタンス化する必要がある場合は、抽象クラス内のすべての抽象メソッドを実装する必要があります。サブクラスが抽象クラス内のすべての抽象メソッドを実装していない場合、サブクラスも抽象クラスであり、クラス内でその前にabstractキーワードを付ける必要があり、インスタンス化できません。

4.サブクラスが抽象メソッドを実装する場合、サブクラスの抽象メソッドのアクセス制御は、親クラスの抽象メソッドのアクセス制御よりも厳密にすることはできません。つまり、(A 親クラス、B サブクラス)

(1 ) A の abstract_func() が public として宣言されている場合、B の abstract_func() の宣言は public のみにすることができ、protected または private にすることはできません

(2) A の abstract_func() の場合が protected として宣言されている場合、B A の abstract_func() の宣言は public または protected にすることができますが、private にすることはできません

(3) A の abstract_func() が private として宣言されている場合、次のように定義することはできません。プライベート! (

致命的エラー

: 抽象関数 A::abstract_func() はプライベートとして宣言できません ) interface

1.抽象クラスは具体的な実装の標準を提供しますが、インターフェイスは純粋なテンプレートです。インターフェイスは関数のみを定義し、実装内容は定義しません。インターフェースはキーワードinterfaceで宣言されます。

2 .インターフェイスは完全に抽象です。宣言できるのはメソッドとパブリック メソッドのみです。プライベート メソッドとプロテクト メソッドを宣言できず、メソッド本体を定義できず、インスタンス変数も宣言できません。

3.インターフェイスは定数変数を宣言できます。しかし、インターフェイスに定数変数を配置することは、インターフェイスとしての存在目的に違反し、インターフェイスとクラスの異なる値を混乱させます。本当に必要な場合は、対応する抽象クラスまたはクラスに配置できます。

4.インターフェイスを実装するクラスは、そのインターフェイスで定義されているすべてのメソッドを実装する必要があります。それ以外の場合、クラスは抽象として宣言される必要があります。

5.クラスは、宣言内でimplements キーワードを使用してインターフェイスを実装できます。これを実行した後、インターフェイスを実装する具体的なプロセスは、抽象メソッドのみを含む抽象クラスを継承するのと同じになります。

6.クラスは親クラスを継承し、同時に任意の数のインターフェイスを実装できます。 extends 句は、implements 句の前に置く必要があります。 PHP は 1 つの親クラスからの継承のみをサポートするため、extends キーワードの後に​​はクラス名のみを指定できます。 ######7。インターフェースは別のインターフェースを実装することはできませんが、複数のインターフェースを継承できます

#3. 抽象クラスとインターフェースの類似点と相違点

##1. 類似点:

(1) 両方です抽象クラスなのでインスタンス化できません。

(2) インターフェース実装クラスと抽象クラスのサブクラスの両方が、宣言された抽象メソッドを実装する必要があります。

2. 相違点:

(1) インターフェースはimplementsを使って実装し、抽象クラスはextendsを使って継承する必要があります。

(2) クラスは複数のインターフェースを実装できますが、クラスが継承できる抽象クラスは 1 つだけです。

(3) インターフェースは特定の機能の実装を重視するのに対し、抽象クラスは所有関係を重視します。

(4) インターフェース実装クラスと抽象クラスのサブクラスは、対応する抽象メソッドを実装する必要がありますが、実装形式が異なります。インターフェイス内のすべてのメソッドは抽象メソッドであり、宣言のみが行われ (宣言、メソッド本体はありません)、実装クラスはそれを実装する必要があります。抽象クラスのサブクラスは選択的に実装できます。

この選択には 2 つの意味があります:

a) 抽象クラスのすべてのメソッドが抽象であるわけではありません。抽象を持つメソッドのみが抽象であり、サブクラスはそれらを実装する必要があります。抽象を持たないメソッドの場合、メソッド本体は抽象クラスで定義する必要があります。

b) 抽象クラスのサブクラスがそれを継承する場合、非抽象メソッドを直接継承またはオーバーライドできますが、抽象メソッドの場合は、実装することを選択することも、そのサブクラスに任せることもできますが、このクラスは抽象クラスとしても宣言する必要があります。抽象クラスなので当然インスタンス化できません。

(5) 抽象クラスはインターフェースとクラスの仲介者です。抽象クラスはインターフェイスとクラスを接続する役割を果たします。

一方では、抽象クラスは抽象的であり、サブクラスが実装する必要がある関数を標準化するために抽象メソッドを宣言できます;

一方では、サブクラスが使用するデフォルトのメソッド本体を定義できます直接、またはオーバーライドします。さらに、継承を通じてサブクラスで使用する独自のインスタンス変数を定義できます。

(6) インターフェイス内の抽象メソッドの前に抽象キーワードを追加することはできません。抽象メソッドはデフォルトで暗黙的であり、抽象メソッドの継承を防ぐために、final キーワードを追加することはできません。抽象クラスでは、抽象メソッドとして明示的に宣言されていることを示すために、抽象メソッドの前に abstract を追加する必要があります。

(7) インターフェース内の抽象メソッドは、デフォルトでは public であり、public のみが可能であり、private または protected 修飾子で変更することはできません。抽象クラスの抽象メソッドは、public および protected で変更できますが、private で変更することはできません。

3. インターフェースの適用場面

(1) クラスは、その実装方法に関わらず、連携のために特定のインターフェースを必要とします。

(2) 特定の機能を実現できる識別子として存在する場合もあれば、インターフェースメソッドを持たない純粋な識別子である場合もあります。

(3) クラスのグループを単一のクラスとして扱う必要があり、呼び出し元はインターフェイスを通じてのみこのクラスのグループに連絡します。

(4) 特定の機能を複数実装する必要があり、それらの機能は全く関連性がない場合があります。

4. 抽象クラスの適用場面

つまり、統一インターフェースとインスタンス変数やデフォルトメソッドの両方が必要な場合に利用できます。最も一般的なものは次のとおりです。

(1) インターフェイスのセットを定義しますが、各実装クラスにすべてのインターフェイスの実装を強制したくありません。抽象クラスを使用してメソッド本体のセット、または空のメソッド本体を定義し、サブクラスが対象とするメソッドを選択できるようにすることができます。

(2) 純粋なインターフェースだけではクラス間の連携を満足できない場合があり、異なる関係を区別するためにクラス内の状態を表す変数も必要となります。抽象の仲介的な役割は、これをうまく満たすことができます。

(3) 相互に調整されたメソッドのセットを標準化します。その一部は共通で状態に依存せず、サブクラスが個別に実装する必要なく共有できますが、他のメソッドは各サブクラスで実装する必要があります。特定の状態に応じて特定の機能を実現します。

上記がこの記事の全内容です。皆様の学習に少しでもお役に立てれば幸いです。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。

関連する推奨事項:

php の経度および緯度に基づく並べ替えと、経度および緯度に基づく距離セグメントのフィルタリング

PHP における Define と Const の違い

以上がPHPにおけるstatic、final、interface、abstractの違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

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

セッションのハイジャックはどのように機能し、どのようにPHPでそれを軽減できますか? セッションのハイジャックはどのように機能し、どのようにPHPでそれを軽減できますか? Apr 06, 2025 am 12:02 AM

セッションハイジャックは、次の手順で達成できます。1。セッションIDを取得します。2。セッションIDを使用します。3。セッションをアクティブに保ちます。 PHPでのセッションハイジャックを防ぐための方法には次のものが含まれます。1。セッション_regenerate_id()関数を使用して、セッションIDを再生します。2。データベースを介してストアセッションデータを3。

確固たる原則と、それらがPHP開発にどのように適用されるかを説明してください。 確固たる原則と、それらがPHP開発にどのように適用されるかを説明してください。 Apr 03, 2025 am 12:04 AM

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

phpstormでCLIモードをデバッグする方法は? phpstormでCLIモードをデバッグする方法は? Apr 01, 2025 pm 02:57 PM

phpstormでCLIモードをデバッグする方法は? PHPStormで開発するときは、PHPをコマンドラインインターフェイス(CLI)モードでデバッグする必要がある場合があります。

システムの再起動後にUnixSocketの権限を自動的に設定する方法は? システムの再起動後にUnixSocketの権限を自動的に設定する方法は? Mar 31, 2025 pm 11:54 PM

システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

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

PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? Apr 01, 2025 pm 03:12 PM

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。

See all articles