オブジェクト指向
オブジェクト指向プログラミング (OOP、オブジェクト指向プログラミング) は、コンピューター プログラミング アーキテクチャです。OOP の基本原理の 1 つは、コンピューター プログラムが、OOP の 3 つの目標を達成するための単一のユニットまたはオブジェクトで構成されることです。ソフトウェア エンジニアリングの重要な点は、再利用性、柔軟性、拡張性です。全体的な操作を実現するために、各オブジェクトは情報を受信し、データを処理し、他のオブジェクトに情報を送信できます。オブジェクト指向はソフトウェア開発の分野で常に注目されています。まず第一に、オブジェクト指向は人間の物の見方の一般的なルールと一致しています。第二に、オブジェクト指向の手法を使用することで、システムの各部分がそれぞれの役割を果たし、任務を遂行できるようになります。これにより、プログラマーは、よりシンプルで保守が容易で再利用可能なコードを作成できるようになります。 PHP は真のオブジェクト指向言語ではないという人もいますが、これは事実です。 PHP はハイブリッド言語であり、OOP または従来の手続き型プログラミングを使用できます。ただし、大規模なプロジェクトの場合は、純粋な OOP を使用して PHP でクラスを宣言し、プロジェクト内でオブジェクトとクラスのみを使用する必要がある場合があります。この概念については詳しく説明しません。なぜなら、多くの人や友人がオブジェクト指向プログラミングから遠ざかる主な理由は、オブジェクト指向プログラミングに触れても理解できないため、学びたくないからです。読者が全体の内容を理解するまで待ちます。
オブジェクト指向を学ぶので、まずプロセス指向とは何かを理解しましょう。
手続き指向
「手続き指向」とは、プロセス中心のプログラミングの考え方です。 「プロセス指向」は、「レコード指向」プログラミングのアイデアとも呼ばれます。これらは、豊富な「オブジェクト指向」機能 (継承、ポリモーフィズムなど) をサポートせず、永続状態とドメイン ロジックの混合を許可しません。
問題を解決するために必要な手順を分析し、関数を使用してこれらの手順を 1 つずつ呼び出すだけです。プロセス指向の重要な利点
プロセス指向は、問題の解決策を分析し、必要なステップを実行し、関数を使用してこれらのステップを 1 つずつ呼び出すだけです。オブジェクト指向は、問題を構成するトランザクションをさまざまなオブジェクトに分解することです。オブジェクトを確立する目的は、ステップを完了することではなく、問題を解決するステップ全体における何かの動作を記述することです。
例えば次の例です
オブジェクト指向では問題をステップではなく機能で分割していることがはっきりとわかります。チェスのゲームの描画でも、プロセス指向の設計ではこのような動作が複数のステップに分散されており、通常、デザイナーは実際の状況を考慮してさまざまな簡略化を行うため、異なる描画バージョンが表示される可能性があります。オブジェクト指向設計では、描画はチェス盤オブジェクト内にのみ表示できるため、描画の統一性が保証されます
クラスとオブジェクトの関係
オブジェクト: オブジェクトは人々が研究したいもの、それです。具体的なものだけでなく、抽象的なルール、計画、イベントを表すこともできます。オブジェクトには状態があり、オブジェクトはデータ値を使用してその状態を記述します。オブジェクトには、オブジェクトの状態を変更するために使用される操作もあります。オブジェクトとその操作は、オブジェクトの動作です。オブジェクトはデータと操作の組み合わせを実現するため、データと操作はオブジェクトの単一性の中にカプセル化されます。 クラス: 同じ特性 (データ要素) と動作 (関数) を持つオブジェクトを抽象化したものがクラスです。したがって、オブジェクトの抽象化がクラスであり、クラスの具体化がオブジェクトです。クラスのインスタンスがオブジェクトであり、クラスが実際にはデータ型であるとも言えます。クラスにはオブジェクトの状態を抽象化した属性があり、データ構造を使用してクラスの属性を記述します。クラスには、オブジェクトの動作を抽象化したオペレーションがあり、オペレーション名とそのオペレーションを実装するメソッドによって記述されます。 オブジェクトとクラスの関係: クラスとオブジェクトの関係は、型と鋳物の関係に似ており、クラスの強さの結果がオブジェクトであり、オブジェクトの抽象化がクラスです。は、同じ特性 (属性) を持つオブジェクトのグループと同じ動作を持つオブジェクトを表します。phpクラスのメンバー属性とメンバーメソッド
クラスによって定義されたメソッド
<?php class phpClass { var $var1; var $var2 = "constant string"; function myfunc ($arg1, $arg2) { [..] } [..] } ?>
<?php class boy{ var $name ="jw"; var $age = "21"; var $sex = "男"; var $height = "182CM"; var $eye = "big"; //函数(成员方法) function zuofan(){ return "做饭<br>"; } function jiawu(){ return "家务<br>"; } }; ?>
注: メンバー属性は、演算子、変数、メソッド、または関数呼び出しを含む式にすることはできません。宣言されたメンバー メソッドはオブジェクトに関連している必要があり、無意味な操作であってはなりません。
インスタンス化されたオブジェクト
クラスのインスタンス化形式は次のとおりです: $object name = new class name ([parameter]) // クラスのインスタンス化: というステートメント。クラスはオブジェクトになります
new.php で提供されるソース コードでは、オブジェクトをインスタンス化してアクセスする方法が明確にわかります。
<?php class boy{ //变量(成员属性) var $name ="jw"; var $age = "21"; var $sex = "男"; var $height = "182CM"; var $eye = "big"; //函数(成员方法) function zuofan(){ return "做饭<br>"; } function jiawu(){ return "家务<br>"; } } $boy1 = new boy(); $boy1->name = "张三"; $boy2 = new boy(); $boy2 ->name = "李四"; echo $boy1 -> sex."<br>"; echo $boy2 -> height."<br>"; ?>
-> 記号はアクセスオブジェクト名の下のクラスを表します。
特別なオブジェクト参照「this」。
それがオブジェクトのメンバーである限り、このオブジェクトの内部およびメソッドにアクセスするには、このオブジェクトを使用する必要があります。
<?php class boy{ //变量(成员属性) var $name ="jw"; var $age = "21"; var $sex = "男"; //函数(成员方法) public function zuofan(){ echo "{$this->name} 做饭<br>"; $this->jiawu(); } function jiawu(){ echo "家务<br>"; } } $boy1 = new boy(); $boy2 = new boy; $boy2 ->name = "李四"; $boy1->name = "张三"; $boy1->zuofan(); $boy2->zuofan(); ?>
コンストラクターメソッド
コンストラクター関数は特別なメソッドです。これは主に、オブジェクトの作成時にオブジェクトを初期化する、つまりオブジェクトのメンバー変数に初期値を割り当てるために使用され、オブジェクトを作成するステートメント内で常に new 演算子と一緒に使用されます。
1. オブジェクトの作成後に最初に自動的に呼び出されるメソッドです (特殊)
2. メソッド名はクラス名と同じにすることができます
3. 初期値を割り当てるために使用します。オブジェクト内のメンバーに .
<?php class boy{ //变量(成员属性) var $name; var $age; var $sex; function __construct($name,$age,$sex="男"){ $this->name="$name"; $this->age="$age"; $this->sex="$sex"; } //函数(成员方法) public function zuofan(){ echo "{$this->name} 做饭<br>"; $this->jiawu(); } function jiawu(){ echo "家务<br>"; } } $boy1 = new boy("名字",28); $boy2 = new boy("名",26,"男"); $boy1->zuofan(); $boy2->zuofan(); ?>
Destructor メソッド
Destructor (デストラクター) コンストラクターとは逆に、オブジェクトがそのライフサイクルを終了するとき (たとえば、オブジェクトが配置されている関数が呼び出されたとき) )、システムは自動的にデストラクターを実行します。
PHP 5 では、他のオブジェクト指向言語と同様のデストラクターの概念が導入されました。構文形式は次のとおりです。
void __destruct ( void )
Inheritance
PHP は、キーワード extends を使用してオブジェクトを継承します。 class の場合、PHP は多重継承をサポートしていません。形式は次のとおりです:
<?php
class Child extends Parent {
// コード部分
}
?>
アクセス制御
PHP属性またはメソッドの場合、アクセス制御はキーワード public (パブリック)、protected (保護)、または private (プライベート) を先頭に追加することで実現されます。
· パブリック: パブリック クラスのメンバーにはどこからでもアクセスできます。
· 保護: 保護されたクラスのメンバーは、それ自体、そのサブクラス、親クラスからアクセスできます。
· プライベート: プライベート クラスのメンバーには、それが定義されているクラスのみがアクセスできます。
public.php protected.php private.php を参照して違いを確認できます
メソッドの書き換え
メソッドのオーバーライド/オーバーライド - どのような状況で使用されるか: 親クラスがすべてのサブクラスを認識している場合 すべてが必要ですメソッドを使用しますが、親クラスがこのメソッドの書き方を知らない場合は、メソッドのオーバーロードを使用する必要があります。現時点では、サブクラスでこのメソッドをオーバーライドすることができます。
人気のある例 - 親クラス (animal) は、そのサブクラス (猫と犬) が吠えることを知っていますが、その鳴き声は異なるため、親クラスはこのメソッドを作成できず、サブクラス (猫と犬) には犬のみを許可できます)定義します。コードは次のとおりです:
<?php class Animal{ public $name; protected $price; function cry(){ echo "不知道动物怎么叫"; } } class Dog extends Animal{ function cry(){ echo "汪汪..."; } } class Pig extends Animal{ function cry(){ echo "哼哼..." } } ?>
インターフェース
インターフェースは規定であり、抽象クラスに似た、人が継承できるものです
その中で定義されたメソッドはインスタンス化されませんが、それを実装するには他のクラスが必要であり、インターフェースによって定義されたすべてのメソッドは 1 つずつ実装する必要があります。たとえば、
インターフェイス Shop
{
public function buy($gid);
public function view($gid);
}
ショップ インターフェイス クラスを宣言し、次の 3 つのメソッドを定義します。 、sell、view の場合、このクラスを継承するすべてのサブクラスは、これら 3 つのメソッドのいずれかを実装する必要があります。サブクラスがこれらを実装していない場合、機能しません。実際、インターフェイス クラスは、端的に言えば、クラスのテンプレートであり、クラスの規則です。このカテゴリに属する場合は、どのような方法であっても、私の規則に従わなければなりません。
<?php class BaseShop implements Shop { public function buy($gid) { echo('你购买了ID为 :'.$gid.'的商品'); } public function sell($gid) echo('你卖了ID为 :'.$gid.'的商品'); } public function view($gid) { echo('你查看了ID为 :'.$gid.'的商品'); } } ?>
定数
クラス内で常に変更されない値を定数として定義できます。定数を定義および使用するときに $ 記号を使用する必要はありません。 定数の値は固定値である必要があり、変数、クラス属性、数学的演算や関数呼び出しの結果にすることはできません。<?php class MyClass { const constant = '常量值'; function showConstant() { echo self::constant . PHP_EOL; } } echo MyClass::constant . PHP_EOL; $classname = "MyClass"; echo $classname::constant . PHP_EOL; // 自 5.3.0 起 $class = new MyClass(); $class->showConstant(); echo $class::constant . PHP_EOL; // 自 PHP 5.3.0 起 ?>phpの::の意味クラス内の静的メソッドと静的属性の参照メソッド
例えば
<?php class Test{ public static $test = 1; public static function test(){ } } ?>Test::$testを使用すると、オブジェクトをインスタンス化せずに$test属性の値を直接取得できます
静的メソッド呼び出しも同様に、Test::test(); で静的メソッド test を直接呼び出します
抽象クラス
PHP プログラマーにとって、習得するのが最も難しい点は PHP 抽象の知識点ですクラスの申し込み。私は初心者なので、まだオブジェクト指向の知識を使ってプログラミングする準備ができていませんが、将来的には、クラスを使用してカプセル化したり、インターフェイスを使用してさまざまなモジュール形式でプログラムを開発したりすることは避けられません。 自然言語では、抽象概念をオブジェクトの大きな説明として理解します。これは、特定の種類のオブジェクトに共通する特性です。 PHP にも同じことが当てはまります。クラスを抽象化する場合、このクラスは、そのサブメソッドが実装する必要があるいくつかの動作を示すテンプレートである必要があります。 PHP抽象クラスアプリケーションの定義: 抽象クラスClassName{}PHP抽象クラスアプリケーションのキーポイント: 1. いくつかのメソッドを定義し、サブクラスはこの抽象化のすべてのメソッドを完全に実装する必要があります 2.抽象クラスからオブジェクトを作成することはできません。その意味は拡張されることです 3. 抽象クラスには通常、抽象メソッドがあり、メソッドには中括弧がありませんPHP 抽象クラスの適用ポイント: 1. 抽象メソッドは次のことを行います特定の関数を実装する必要はなく、サブクラスによって完了します 2. サブクラスが抽象クラスのメソッドを実装する場合、サブクラスの可視性は抽象メソッドの定義以上である必要があります 3.抽象クラスのメソッドはパラメータを持つことも、空にすることもできます 4 . 抽象メソッドにパラメータがある場合、サブクラスの実装にも同じ数のパラメータが必要ですPHP抽象クラスの適用例:abstract public function_name( ); //中括弧がないことに注意してくださいPHP 抽象クラスのルール:
1. クラスに少なくとも 1 つの抽象メソッドが含まれている限り、抽象クラスとして宣言する必要があります
2. 抽象メソッドには関数本体を含めることはできません
3.クラスを実装する場合、抽象メソッドを実装する人は、抽象メソッドと同じか、それ以下のアクセス レベルを持つ必要があります
4. 抽象クラスのサブクラスを継承するすべての抽象メソッドを実装しない場合、そのサブクラスも抽象クラスになります。実装してみましょう 単純な抽象クラス: 長方形の面積を計算します。この長方形は形状クラスから拡張できます。
abstract.php コードを表示できます
Final キーワード
クラスを継承したくない場合は、final を使用してこのクラスを変更します。このクラスは継承されません。
final---クラスとメソッドの前に使用されます。
最終クラス --- 継承できません。 最終メソッド --- オーバーライドできません。
最終クラスは継承できません。
クラスを拡張不可能にするだけの場合は、クラスの前に Final を追加して、クラスが継承できないようにすることができます。
PHP の変数スコープのもう 1 つの重要な機能は、静的変数です。静的変数はローカル関数スコープ内にのみ存在し、プログラムの実行がこのスコープを離れるときに一度だけ初期化され、その値は消えず、最後の実行の結果が使用されます。
PHP_EOL
改行
親クラスのコンストラクターメソッド
parent::__construct() を呼び出します。
PHP は、サブクラスのコンストラクターで親クラスのコンストラクターを自動的に呼び出しません。親クラスのコンストラクターを実行するには、サブクラスのコンストラクターでそれを呼び出す必要があります