PHPの抽象クラスとインターフェースの違いは何ですか

青灯夜游
リリース: 2023-03-09 16:36:02
オリジナル
2580 人が閲覧しました

違い: 1. インターフェイスのキーワードはimplements、抽象クラスのキーワードはextends; 2. インターフェイスはメンバ変数を宣言できませんが、抽象クラスは宣言できます; 3. インターフェイスにはコンストラクタがありませんが、抽象クラスにはあります。 4. インターフェイス メソッド デフォルトはパブリック型ですが、抽象クラスはそうではありません; 5. クラスは同時に複数のインターフェイスを実装でき、1 つの抽象クラスからのみ継承できます。

PHPの抽象クラスとインターフェースの違いは何ですか

#このチュートリアルの動作環境: Windows7 システム、PHP7.1 バージョン、DELL G3 コンピューター

#違い:

#1. インターフェースはキーワードimplementsを通じて使用されます。抽象クラスを使用するには、キーワード extends を使用します。もちろん、キーワード extends を使用してインターフェイスを継承することもできます。

2. メンバー変数 (クラス静的変数を含む) はインターフェイス内で宣言できませんが、クラス定数は宣言できます。さまざまなタイプのメンバー変数を抽象クラスで宣言して、データのカプセル化を実装できます。 (さらに、JAVA インターフェースのメンバー変数は public static Final 型として宣言する必要があります)

<?php 
abstract class Father {
	function meth1() {
		echo "meth1...<br>";
	}
	abstract function meth2();
	public $var1="var1";
	public static $var2="var2";
	const Var3="Var3";
}
class Son extends Father {
	function meth2() {
		echo "meth2 of Son...<br>";
	}
}
$s=new Son();
echo $s->var1."<br>";
echo Father::$var2."<br>";
echo Father::Var3."<br>";
 
 
Interface IFather {
	//public $iVar1="iVar1";        此处接口定义中不能包含成员变量
	//public static $iVar2="iVar2"; 此处接口定义中不能包含静态变量
	const iVar3="iVar3";
	function iMeth1();
}
Class ISon implements IFather {
	function iMeth1() {
		echo "iMeth1...<br>";
	}
}
$is=new ISon();
echo IFather::iVar3;
?>
ログイン後にコピー
3. インターフェースにはコンストラクターがありませんが、抽象クラスにはコンストラクターを持つことができます。

4. インターフェイスのメソッドはデフォルトでパブリック型ですが、抽象クラスのメソッドはプライベート、プロテクト、パブリックに変更できます。

5. クラスは複数のインターフェイスを同時に実装できますが、クラスは 1 つの抽象クラスからのみ継承できます。

抽象クラスまたはインターフェイス。

    密接に関連するオブジェクトによって採用されるモデルを作成したい場合は、抽象クラスを使用できます。無関係な多数のオブジェクトに採用される機能を作成する場合は、インターフェイスを使用します。
    動作を複数のソースから継承する必要がある場合は、インターフェイスを使用します。
  • すべてのクラスが共通の動作実装を共有することがわかっている場合は、抽象クラスを使用し、その中で動作を実装します。
推奨学習: 「

PHP ビデオ チュートリアル

以上がPHPの抽象クラスとインターフェースの違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート