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