プログラミング|オブジェクト
この記事では、PHP のオブジェクト指向プログラミング (OOP) について紹介します。オブジェクト指向の概念を使用して、より少ないコードでより優れたプログラムを作成する方法を示します。皆さんの幸運を祈ります。
オブジェクト指向プログラミングの概念は、作成者ごとに異なる見解があります。オブジェクト指向言語が持つべきものを思い出させてください:
- データの抽象化と情報の隠蔽
- 継承
- ポリモーフィズム
のクラスの使用方法。 PHP でのカプセル化:
class Something {
// OOP では、通常、クラスの名前は大文字で始まります
var $x;
function setX($v) {
// メソッドは小文字で始まり、小文字で区切られます。
// メソッド名の例 getValueOfArea()
$this->x=$v;
}
function getX() {
return $this->x
}
?>
もちろんです。独自の方法を使用することもできますが、標準を持っておくことは常に良いことです。
PHPのクラスのデータメンバーは、値が割り当てられるまでは「var」を使用して定義されます。データ メンバーは、整数、配列、連想配列 (連想配列)、またはオブジェクトの場合があります。メソッド内のデータ メンバーにアクセスするには、 $this->name を使用する必要があります。それ以外の場合は、メソッドの関数のローカル変数です。
new を使ってオブジェクトを作成します
$obj = new Something;
次に、メンバー関数
$obj->setX(5);
$see = $obj->getX(); を使用します。 will 5 Assign member variables in object (not class) obj, and then getX returns the value 5.
また、オブジェクト参照を使用してメンバー変数にアクセスすることもできます。たとえば、 $obj->x=6; ただし、これはそうではありません。優れたアイデアのオブジェクト指向プログラミング手法です。メンバー変数の値を設定するにはメンバー関数を使用し、メンバー変数を読み取るにはメンバー関数を使用することを強くお勧めします。メンバー関数を使用する以外はメンバー変数にアクセスできないと信じているなら、あなたは優れたオブジェクト指向プログラマーになれるでしょう。 しかし残念ながら、PHP 自体には変数をプライベートとして宣言する方法がないため、不正なコードが存在することが許されています。
PHPにおける継承はextendを使って宣言します。
class Another extends Something {
var $y;
function setY($v) {
// メソッドは小文字で始まり、小文字で区切られます
// メソッド名の例 getValueOfArea()
$this->y
独自のメンバー変数とメンバー関数。例:
$obj2=new Another;
$obj2->setX(6);
$obj2->setY(7);
多重継承はサポートされていないため、1 つのクラスに複数のクラスを継承させることはできません。
継承されたクラスでは、メソッドを再定義するために再定義できます。「Another」で getX を再定義すると、同様に、継承されたクラスで同じメンバー変数を宣言すると、「Something」のメンバー関数 getX にアクセスできなくなります。名前を親クラスと同じ名前にすると、継承クラスの変数は親クラスと同じ名前の変数を非表示にします。
クラスのコンストラクターを定義できます。コンストラクターはクラスと同じ名前のメンバー関数で、クラスのオブジェクトを作成するときに呼び出されます。
クラス 何か {
var $x;
関数 何か($y) {
$this->x=$y;
function setX($v) {
$this->x=$v;
}
function getX() {
return $this->x;
}
}
?>
したがって、次のメソッドを使用してオブジェクトを作成できます。値を割り当てます。 5. メンバー変数 x を指定すると、コンストラクターとメンバー関数は通常の PHP 関数であるため、デフォルトのパラメーターを使用できます。
function Something($x="3",$y="5")
次に、
$obj=new Something(); // x=3 and y=5
$obj=new Something(8) ; // x=8 and y=5
$obj=new Something(8,9); // x=8 and y=9
デフォルトのパラメータはC++と同じように定義されているため、値を渡すことはできません。 to Y ただし、X にデフォルト値を取り、引数は左から右に渡され、引数がなくなると関数はデフォルトの引数を使用します。
継承クラスのコンストラクタが呼び出されたときのみ、継承クラスのオブジェクトが作成され、親クラスのコンストラクタは呼び出されないのがPHPの特徴です。コンストラクター呼び出しチェーンはオブジェクト指向プログラミングの専門分野です。基本クラスのコンストラクターを呼び出したい場合は、継承クラスのコンストラクターで明示的に呼び出す必要があります。これが機能するのは、親クラスのすべてのメソッドが継承されたクラスで使用できるためです。
function Another() {
$this->y=5;
$this->Something(); // 基本クラスのコンストラクターへの明示的な呼び出し
?>
オブジェクト指向プログラミングの優れたメカニズムは、抽象クラスを使用することです。抽象クラスはインスタンス化できませんが、継承されたクラスのインターフェイスを定義するために使用されます。デザイナーは、プログラマに特定の基本クラスからのみ継承させるために抽象クラスをよく使用します。これにより、新しいクラスに必要な機能があることを確認できますが、PHP にはこれを行う標準的な方法はありません。この機能は、コンストラクターで「die」を呼び出すことで基本クラスを定義するため、プログラマは抽象クラスの関数を定義し、各関数で「die」を呼び出すことができます。継承したクラスで基底クラスの関数を再定義せずに直接呼び出すとエラーが発生します。
さらに、PHP には型がないため、一部のオブジェクトは基本クラスを継承する継承クラスから作成されることを確認する必要があるため、クラスを識別するメソッド (「何らかの ID」を返す) を基本クラスに追加し、使用するパラメータとしてオブジェクトを受け取るときに、これを確認してください。 しかし、不正なプログラムに対する解決策はありません。不正なプログラムは継承されたクラスでこの関数を再定義できるため、通常、この方法は怠惰なプログラマにしか機能しません。もちろん、最善の方法は、プログラムが基本クラスのコードに触れないようにして、インターフェイスのみを提供することです。
PHPではオーバーロードはサポートされていません。オブジェクト指向プログラミングでは、異なるパラメーターの型と数値を定義することによって、同じ名前のメンバー関数をオーバーロードできます。 PHP は型付けが緩い言語であるため、パラメーターの型のオーバーロードは役に立ちません。同様に、異なる数のパラメーターを使用したオーバーロードも機能しません。
オブジェクト指向プログラミングでは、コンストラクターをオーバーロードすると、さまざまな方法 (さまざまな数のパラメーターを渡すことによって) でさまざまなオブジェクトを作成できる場合に便利です。これを行うためのちょっとしたトリック:
class Myclass {
function Myclass() {
$name="Myclass".func_num_args();
//$this->$ であることに注意してください。 name() は通常間違っていますが、ここでは
//$name は呼び出すメソッドの名前を含む文字列です
}
function Myclass1($x) {
code;
}
function Myclass2($x, $y) ) {
code;
}
}
?>
オーバーロードの目的は、このメソッドによって部分的に達成できます。
$obj1=new Myclass(1); //Myclass1 を呼び出します
$obj2=new Myclass(1,2); //Myclass2 を呼び出します
かなりいい感じです!