この記事では、php でのオブジェクト指向プログラミング (oop、オブジェクト指向プログラミング) を紹介します。 OOP の概念と PHP のトリックを使用してコーディングを減らし、品質を向上させる方法を説明します。幸運を!
オブジェクト指向プログラミングの概念:
作者によって意見は異なるかもしれませんが、oop 言語には次の側面がなければなりません:
抽象データ型と情報のカプセル化
継承
ポリモーフィック
PHP では、カプセル化はクラスを通じて完了します。 -------------------------------------- -- --------
何かをクラス化する {
// oop クラスでは、通常、最初の文字は大文字です
変数 $x;
関数 setx($v) {
// メソッドは小文字で始まり、getvalueofarea() のように大文字で単語を区切ります
$this->x=$v;
}
関数 getx() {
$this->x を返す
}
}
?>---------------------------------------------- --- ----
もちろん、自分の好みに応じて定義することもできますが、標準を維持する方が効果的です。
データ メンバーは、「var」宣言を使用してクラス内で定義されます。データ メンバーに値が割り当てられるまでは、データ メンバーには型がありません。データメンバーは次のことができます
整数、配列、連想配列、またはオブジェクトを指定できます。
メソッドはクラス内の関数として定義されます。メソッド内のクラス メンバー変数にアクセスする場合は、$this->name を使用する必要があります。それ以外の場合はメソッド
になります。
法的に言えば、ローカル変数のみにすることができます。
new 演算子を使用してオブジェクトを作成します:
$obj=新しいもの
その後、次の方法でメンバー関数を使用できます:
$obj->setx(5);
$see=$obj->getx();
この例では、setx メンバー関数がオブジェクトのメンバー変数 x (クラスではない) に 5 を代入し、getx がその値 5 を返します。
$obj->x=6 のようなクラス参照を通じてデータ メンバーにアクセスできますが、これはあまり良い習慣ではありません。トンを強くお勧めします
メソッドはメンバー変数にアクセスするために使用されます。メンバー変数を操作不可能なものとして扱い、オブジェクト ハンドルを介したメソッドのみを使用すると、
になります。
優秀なプログラマーです。残念ながら、PHP はプライベート メンバー変数の宣言をサポートしていないため、PHP では不正なコードが許可されています。
PHP での継承の実装は非常に簡単で、extend キーワードを使用するだけです。
-------------------------------------------------- ---
別のクラスが何かを拡張する {
変数 $y;
関数 sety($v) {
$this->y=$v;
}
関数 gety() {
$this->y を返します
}
}
?>---------------------------------------------- --- ----
現在、「別の」クラスのオブジェクトには、親クラス (何か) のすべてのデータ メンバーとメソッドが含まれており、独自のデータ メンバーとメソッドも追加されています。
を使用できます
$obj2=新しいもの
$obj2->setx(6);
$obj2->sety(7);
現在、PHP は多重継承をサポートしていないため、2 つ以上のクラスから新しいクラスを派生することはできません。
派生クラスでメソッドを再定義できます。「別の」クラスで getx メソッドを再定義すると、「何か」で getx メソッドを使用できなくなります。派生クラスで基本クラスと同じ名前のデータ メンバーを宣言すると、それを処理するときに基本クラスのデータ メンバーが「隠蔽」されます。
クラス内にコンストラクターを定義できます。コンストラクターはクラス名と同じ名前のメソッドで、クラスのオブジェクトを作成するときに呼び出されます。例:
-------------------------------------------------- ---
何かをクラス化する {
変数 $x;
関数何か($y) {
$this->x=$y
}
関数 setx($v) {
$this->x=$v;
}
関数 getx() {
$this->x を返す
}
}
?>---------------------------------------------- --- ----
したがって、次のようにしてオブジェクトを作成できます:
$obj=新しい何か(6);
コンストラクターはデータ変数 x に 6 を自動的に割り当てます。コンストラクターとメソッドは通常の PHP 関数であるため、デフォルトのパラメーターを使用できます。
関数何か($x="3",$y="5")
次へ:
$obj=new something() // x=3 と y=5
;
$obj=new something(8) // x=8 および y=5
;
$obj=new something(8,9) // x=8 および y=9
;
デフォルトのパラメータは C++ メソッドを使用するため、y の値を無視して x にデフォルトのパラメータを与えることはできません。パラメータは
の場合、左から右に割り当てられます。
渡されたパラメータが必須パラメータよりも小さい場合は、デフォルトのパラメータが使用されます。
派生クラスのオブジェクトが作成されると、そのコンストラクターのみが呼び出され、基本
を呼び出したい場合は、親クラスのコンストラクターは呼び出されません。
クラスのコンストラクターは、派生クラスのコンストラクターで明示的に呼び出す必要があります。これができるのは、派生クラスのすべての親クラスのメソッドが
であるためです。
利用できます。
-------------------------------------------------- ---
関数 another() {
$this->y=5;
$this->何か();
//呼び出し元の基本クラスのコンストラクターを表示します
}
?>---------------------------------------------- --- ----
oop の非常に優れたメカニズムは、抽象クラスを使用することです。抽象クラスはインスタンス化できず、派生クラスへのインターフェイスのみを提供できます。デザイナーは通常
抽象クラスを使用すると、プログラマーに基本クラスから派生させることができ、新しいクラスに必要な機能の一部が確実に含まれるようになります。 php には標準的な方法はありません
ただし:
この機能が必要な場合は、基本クラスを定義し、そのコンストラクターの後に「die」呼び出しを追加して、基本クラスが確実に機能するようにすることができます
クラスはインスタンス化できず、現時点では各メソッド (インターフェイス) の後に「die」ステートメントが追加されるため、プログラマが派生クラスに
を持たない場合
メソッドをオーバーライドするとエラーがスローされます。また、PHP は型指定されていないため、オブジェクトが基本クラスから派生していることを確認する必要がある場合があります
クラスを作成し、基本クラスにメソッドを追加してクラスの ID を定義し (何らかの識別 ID を返します)、オブジェクト パラメーターを受け取ったときに確認します
この値。もちろん、悪意のあるプログラマが派生クラスでこのメソッドをオーバーライドした場合、このメソッドは機能しませんが、一般的には
今日の問題は、邪悪なプログラマーではなく、怠惰なプログラマーにあります。
もちろん、プログラマーには基本クラスを見えないようにすることができ、プログラマーはインターフェイスを出力するだけで自分の仕事を実行できるのは素晴らしいことです。
phpにはデストラクタがありません。
オーバーロード (上書きとは異なります) は PHP ではサポートされていません。 oop では、メソッドをオーバーロードして、同じ
を持つ 2 つ以上のメソッドを実装できます。
名前は異なりますが、パラメーターの数またはタイプが異なります (言語によって異なります)。 PHP は緩やかに型付けされた言語であるため、型によるオーバーロードは行われません
それは機能しますが、異なる数のパラメーターを使用したオーバーロードも機能しません。
場合によっては、oop でコンストラクターをオーバーロードして、さまざまな方法 (さまざまな数のパラメーターを渡す) でオブジェクトを作成できるようにするとよい場合があります。 PHPで
それを達成するためのテクニックは次のとおりです:
-------------------------------------------------- ---
クラス myclass {
関数 myclass() {
$name="myclass".func_num_args();
$this->$name();
// $this->name() は一般的に間違っていることに注意してください。ただし、ここで $name は呼び出されるメソッドの名前です
}
関数 myclass1($x) {
コード
}
関数 myclass2($x,$y) {
コード
}
}
?>---------------------------------------------- --- ----
このクラスの使用は、クラス内の追加処理を通じてユーザーに透過的です:
$obj1=new myclass(1) //myclass1 が呼び出されます
;
$obj2=new myclass(1,2) //myclass2 が呼び出されます
;
場合によっては、これは非常に便利です。
続きます…
www.bkjia.com