ホームページ  >  記事  >  バックエンド開発  >  phpオブジェクト指向の詳しい解説

phpオブジェクト指向の詳しい解説

WBOY
WBOYオリジナル
2016-06-13 13:27:021206ブラウズ

[Share] PHP オブジェクト指向詳細解説

オブジェクト指向 オブジェクトの概念はオブジェクト指向技術の中核です。ディスプレイの世界では、私たちが直面しているのはコンピューター、テレビ、自転車などの物体です。オブジェクト指向プログラミングでは、オブジェクトは情報とその情報の処理方法の記述で構成される全体であり、現実世界を抽象化したものです。
オブジェクトの主な 3 つの特徴
オブジェクトの動作: オブジェクトにどのような操作を適用できるか、ライトをオンにするかライトをオフにするかが動作です。
オブジェクトの形状: これらのメソッドが適用されたときにオブジェクトがどのように反応するか、色、サイズ、外観。
オブジェクトの表現: オブジェクトの表現は ID カードに相当し、特に同じ動作とステータスの違いを区別します。

オブジェクト指向モデル

オブジェクト指向の概念:
oop (オブジェクト指向プログラミング) を使用すると、コードをより簡潔にし、保守しやすく、再現性を高めることができます

クラスとは:
クラスは、同じ属性とサービスを持つオブジェクトの集合です。たとえば、人、本、船、車はすべて、クラスに属するオブジェクトの統一された抽象的な記述を作成します。クラスは別個です プログラムの場合、属性の説明とサービスの 2 つの部分を含むクラス名が必要です。
オブジェクトとは:
オブジェクトとは、システム内の客観的なイベントを記述するエンティティであり、システムを構成する基本単位です。 *データとコードはエンティティにバンドルされています* オブジェクトは、一連のプロパティと、この一連のプロパティに対して動作する一連の動作で構成されます。
抽象的な観点から見ると、オブジェクトは問題領域または実装領域内の何かを抽象化したものです。これは、保存された情報と、システム内でその物体が果たす役割を反映します。これは、プロパティのセットと、これらのプロパティを操作する権限を持つカプセル化本体です。客観的な世界は、オブジェクトとオブジェクト間の接続で構成されます。
クラスとオブジェクトの関係:
クラスとオブジェクトの関係は、型と鋳物の関係に似ています。クラスの強さの結果がオブジェクトであり、オブジェクトの抽象化がクラスです。同じ特性 (属性) を持つオブジェクトのグループを記述します。 ) と同じ動作です。

クラス、プロパティ、メソッド
PHP で定義されたクラス構文形式:
class クラス名 [オプションの属性]{
public $property [=value];… // public を使用してパブリック識別子を宣言し、変数に値を割り当てることもできます。 function functionname (args){ //クラスメソッドのメンバー関数
コード} …
//クラスメソッド(メンバー関数)
}

オブジェクトの生成 (クラスのインスタンス化): $object name=new classname( );
オブジェクトのプロパティの使用
クラスでは、特別なポインター $this にアクセスできます。クラス内の操作を通じて変数を設定またはアクセスするときは、$this->name を使用して参照します。
オブジェクトの生成
クラスを定義した後、 new を使用してクラスを宣言します。オブジェクト データのカプセル化の特性により、クラスで定義された属性と動作関数は、オブジェクトを通じて間接的に呼び出す必要があります。情報のアクセス制御クラスの目的を達成します。
オブジェクトとクラスの関係
オブジェクトとクラスの関係:
オブジェクトは実際に存在し、動的リソースを占有します。
クラスはオブジェクトの設計図であり、静的リソースを占有する場合があります。
オブジェクト属性は動的リソースを占有します
クラス (静的) 属性は、実際にはクラス名前空間
の「グローバル変数」です。 パフォーマンスに関する考慮事項:
各オブジェクトは個別のデータ空間を占有します
呼び出しレベルが増加すると、実行時間が消費される可能性があります
メソッドパラメータの形式と転送メソッド
メソッドのパラメータには、基本的なデータ型、配列、クラス オブジェクトを使用できます。
基本データ型: 値パラメータの受け渡し
配列: 値パラメータを渡す
クラスオブジェクト: 参照渡し
コンストラクター
コンストラクターはクラス内で初期化の役割を果たします
コンストラクターは、名前が __construct() である必要があることを除いて、他の関数と同じ方法で生成されます。
構文形式: function __construct(parameter){
。 。 。 。 。 。 。 。
}
例:
クラス人{
パブリック $name;
パブリック $sex;
public $age;
function __construct($name,$sex,$age){
echo "私はコンストラクターです
";
$this->name=$name;
$this->sex=$sex;
$this->age=$age;
}
出力結果: 初期化
デストラクター
オブジェクトがそのスコープを離れると (たとえば、オブジェクトが配置されている関数が呼び出された場合)、システムは自動的にデストラクターを実行します。終了する前に、デストラクターでメモリを解放する必要があります。
デストラクター __destruct デストラクターにはパラメータがありません
例:
クラスの人{
function _ _destruct( )
{ エコー「バイバイ!」 }
; }
$a=新しい人();

アクセスタイプ
public public (public 修飾子) はクラス内外からアクセス可能
private private (private 修飾子) はクラス内でのみアクセス可能
protected protected (protected メンバー修飾子) はサブクラスからアクセスできますが、クラス外からはアクセスできません

oop の 3 つの重要な機能
カプセル化、継承、ポリモーフィズム
カプセル化: カプセル化とは、オブジェクトのプロパティと動作を組み合わせて独立した単位にすることです。
クラスをカプセル化するには 2 つの手順が必要です。最初の手順は、set と get を使用して値を読み取り、割り当てることです。
メリットとしては、クラスの実装内容が隠蔽されること、論理的な制御を追加しやすいこと、属性に対する無理な操作が制限されること、コードの修正が容易で保守性が向上することなどが挙げられます。

__get と __set
一般的に言えば、クラスをプライベートにする方が現実的な論理に沿っています。
値操作を取得および適用するための 2 つの関数が事前定義されています。
__get は値を取得します。通常はドメイン
の値です。 __set は通常、値をドメイン
の値に設定します。 __call オブジェクトに存在しないメソッドを呼び出すと、call() メソッドがこの状況を処理します。

静的プロパティと静的メソッド
静的メソッドを宣言するための static キーワード
static static 変数は、すべてのクラスで共有できる静的変数をクラス内に生成します。つまり、静的メンバーは、クラスが初めてロードされるときに配置される「初期化静的セクション」に配置されます。ヒープメモリ内のすべてのオブジェクト
使用法: self::$static プロパティ、self::static メソッド
静的関数 p(){
echo self::$country;
echo self::PI;//定数へのアクセス
//echo $this->name; は静的メソッドでのみ静的プロパティを操作できます
//self::p();
}
外部呼び出し: Class::$static プロパティ、Class::static メソッド

const キーワード: 定数を生成するために使用されます。定数は一意であり、従来の定数は大文字で表記されます。 const CONSTANT = '定数値' は定数
を生成します。 echo self::CONSTANT; //クラス内部アクセス
echo ClassName::CONSTANT;//クラスへの外部アクセス

継承
クラス B のオブジェクトはクラス A のすべてのプロパティと動作を持ち、これをクラス A の B の継承と呼びます。
クラスが複数のクラスからプロパティやサービスを継承する場合、これを多重継承と呼びます。通常、継承するクラスをサブクラスと呼び、継承されるクラスは親クラスになります。ただし、PHP では、親クラスを継承することができます。ただし、サブクラスは親クラスを 1 つしか持つことができませんが、関連する継承が許可されており、継承によってクラスの定義を減らすことができます。
extende は継承関係を宣言します
文法形式: class B extends A この例は、B が A
を継承することを示しています。 クラスの外部アクセスはサブクラスに対して有効です
サブクラスと親クラスの属性とメソッド
サブクラスは親クラスの内容をすべて継承しますが、親クラスのプライベート部分には直接アクセスできません
サブクラスに新しく追加された属性とメソッドは、親クラスの拡張です
親クラスと同じ名前のサブクラスで定義された属性は親クラスの属性のオーバーライドであり、同じ名前のメソッドも親クラスのメソッドのオーバーライドです

オーバーライドされたメソッド
サブクラスでは、parent を使用して親クラスのオーバーライドされたプロパティとメソッドにアクセスします
親::__construce();
親::$name;
親::楽しい();

親クラスの元の属性を上書きします
clone クローン オブジェクトの構文形式 $c=clone $p; $c clone object $p 出力 echo $c->name;

オブジェクトの比較
===2 つの比較演算子。
== は 2 つのオブジェクトの内容を比較します。
=== は比較対象のハンドル、つまり参照アドレスです。

instanceof 演算子は、オブジェクトが特定のクラス型に属しているかどうかを検出するために使用されます。属している場合は true を返し、属さない場合は false
を返します。 __clone() クローン作成後に元のオブジェクトの内容を変更したい場合は、__clone()
で元の属性とメソッドを書き換える必要があります 関数 __clone(){
$this->name="私はクローンです";
}

Final はクラスが最終バージョンであることを意味し、サブクラスから呼び出すことができないことを意味します

ポリモーフィズム

ポリモーフィズムとは、親クラスで定義された属性または動作がサブクラスに継承された後、それらが異なるデータ型を持つことも、異なる動作を示すこともできることを意味します。これにより、同じプロパティまたは動作が親クラスとそのさまざまなサブクラスで異なるセマンティクスを持つことが可能になります。
つまり、サブクラスと親クラスで同じメソッドを実行した結果が異なります。
クラス A {
関数情報(){
echo "情報";
}
}
クラス B は A を拡張します {
関数情報(){
echo “B 情報”;
}
}
クラス C は A を拡張します {
関数情報(){
echo “C INFO”;
}
}
関数 printinfo($obj){
function printinfo(A $obj){
if($obj インスタンスオブ A)
$obj->info();
$obj->info();
}
}
$a=新しいA(); $b=新しいB();
printinfo($a); //情報を出力します
printinfo($b); // B の情報を出力します
printinfo($c); //C 情報を出力します

抽象メソッドと抽象クラス

抽象メソッドはサブクラスのテンプレートとして使用されます。
抽象クラス 人{
パブリック $name;
抽象関数 getInfo();
}
抽象クラスは使用できません。抽象クラスには抽象メソッドが必要です。ただし、動的関数は抽象クラスで定義できます。
インターフェース
クラスがインターフェースを継承する場合、インターフェースのすべてのメソッドをオーバーライドする必要があります。インターフェースのメソッドは共有として定義する必要があります。そうでない場合、インターフェースは複数のインターフェースから継承できません。 構文:
インターフェイス PCI{
const TYPE="PCI";
//パブリック $name エラー
関数 start();
関数 stop();
}
インターフェース内のメソッドは static として宣言できます
インターフェース A{ 関数 a();}
インターフェース B{関数 b();}
インターフェイス C は A{ function c();}
を拡張します クラス D は B,C{
を実装します 関数 a(){}
関数 b(){}
関数 c(){}
}

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