PHP 5 では、新しいオブジェクト モデルが導入されています。 PHP がオブジェクトを処理する方法が完全に書き直され、パフォーマンスが向上し、機能が追加されました。
1. 基本概念
1. クラス
各クラスの定義はキーワード class で始まり、その後にクラス名が続きます。クラス名は、PHP の予約語以外の任意の名前にすることができます。その後に 1 対の中括弧が続き、クラス メンバーとメソッドの定義が含まれます。疑似変数 $this は、オブジェクト内でメソッドが呼び出されるときに使用できます。 $this は呼び出し元オブジェクトへの参照です (通常はメソッドが属するオブジェクトですが、メソッドが 2 番目のオブジェクト内から静的に呼び出される場合は別のオブジェクトになることもあります)。次の例を見てください:
Example#1 オブジェクト指向言語の $this 変数
<ol class="dp-c"> <li class="alt"><span><span><?php </span></span></li><li><span class="keyword">class</span><span> A </span></li><li class="alt"><span>{ </span></li><li><span class="keyword">function</span><span> foo() </span></li><li class="alt"><span>{ </span></li><li><span class="keyword">if</span><span> (isset(</span><span class="vars">$this</span><span>)) { </span></li><li class="alt"><span class="func">echo</span><span> </span><span class="string">'$this is defined ('</span><span>; </span></li><li><span class="func">echo</span><span> get_class(</span><span class="vars">$this</span><span>); </span></li><li class="alt"><span class="func">echo</span><span> </span><span class="string">")n"</span><span>; </span></li><li><span>} </span><span class="keyword">else</span><span> { </span></li><li class="alt"><span class="func">echo</span><span> </span><span class="string">"$this is not defined.n"</span><span>; </span></li><li><span>} </span></li><li class="alt"><span>} </span></li><li><span>} </span></li><li class="alt"><span class="keyword">class</span><span> B </span></li><li><span>{ </span></li><li class="alt"><span class="keyword">function</span><span> bar() </span></li><li><span>{ </span></li><li class="alt"><span>A::foo(); </span></li><li><span>} </span></li><li class="alt"><span>} </span></li><li><span class="vars">$a</span><span> = </span><span class="keyword">new</span><span> A(); </span></li><li class="alt"><span class="vars">$a</span><span>->foo(); </span></span></li> <li><span>A::foo(); </span></li> <li class="alt"> <span class="vars">$b</span><span> = </span><span class="keyword">new</span><span> B(); </span> </li> <li> <span class="vars">$b</span><span>->bar(); </span> </li> <li class="alt"><span>B::bar(); </span></li> <li><span>?> </span></li> </ol>
上記の例は出力します:
<ol class="dp-xml"> <li class="alt"><span><span>$this is defined (a) </span></span></li> <li><span>$this is not defined. </span></li> <li class="alt"><span>$this is defined (b) </span></li> <li><span>$this is not defined. </span></li> </ol>
Example#2 単純なクラス定義
<ol class="dp-c"> <li class="alt"><span><span><?php </span></span></li><li><span class="keyword">class</span><span> SimpleClass </span></li><li class="alt"><span>{ </span></li><li><span class="comment">// 成员声明 </span><span> </span></li><li class="alt"><span class="keyword">public</span><span> </span><span class="vars">$var</span><span> = </span><span class="string">'a default value'</span><span>; </span></li><li><span class="comment">// 方法声明 </span><span> </span></li><li class="alt"><span class="keyword">public</span><span> </span><span class="keyword">function</span><span> displayVar() { </span></li><li><span class="func">echo</span><span> </span><span class="vars">$this</span><span>-></span><span class="keyword">var</span><span>; </span></span></li> <li class="alt"><span>} </span></li> <li><span>} </span></li> <li class="alt"><span>?> </span></li> </ol>
Example#3 のデフォルト値クラス メンバー
<ol class="dp-c"><li class="alt"><span><span><?php </span></span></li><li><span class="keyword">class</span><span> SimpleClass </span></li><li class="alt"><span>{ </span></li><li><span class="comment">// 无效的类成员定义: </span><span> </span></li><li class="alt"><span class="keyword">public</span><span> </span><span class="vars">$var1</span><span> = </span><span class="string">'hello '</span><span>.</span><span class="string">'world'</span><span>; </span></li><li><span class="keyword">public</span><span> </span><span class="vars">$var2</span><span> = <<<EOD </span></li><li class="alt"><span>hello world </span></li><li><span>EOD; </span></li><li class="alt"><span class="keyword">public</span><span> </span><span class="vars">$var3</span><span> = 1+2; </span></li><li><span class="keyword">public</span><span> </span><span class="vars">$var4</span><span> = self::myStaticMethod(); </span></li><li class="alt"><span class="keyword">public</span><span> </span><span class="vars">$var5</span><span> = </span><span class="vars">$myVar</span><span>; </span></li><li><span class="comment">// 正确的类成员定义: </span><span> </span></li><li class="alt"><span class="keyword">public</span><span> </span><span class="vars">$var6</span><span> = myConstant; </span></li><li><span class="keyword">public</span><span> </span><span class="vars">$var7</span><span> = self::classConstant; </span></li><li class="alt"><span class="keyword">public</span><span> </span><span class="vars">$var8</span><span> = </span><span class="keyword">array</span><span>(true, false); </span></li><li><span>} </span></li><li class="alt"><span>?> </span></span></li></ol>
2、new
オブジェクトのインスタンスを作成するには、新しいオブジェクトを作成して変数に割り当てる必要があります。新しいオブジェクトには、オブジェクトがコンストラクターを定義し、エラー時に例外がスローされない限り、作成時に常に値が割り当てられます。
Example#4 インスタンスを作成する
<ol class="dp-c"><li class="alt"><span><span><?php </span></span></li><li><span class="vars">$instance</span><span> = </span><span class="keyword">new</span><span> SimpleClass(); </span></li><li class="alt"><span>?> </span></span></li></ol>
コードをコピーする オブジェクトの既に作成されたインスタンスを新しい変数に代入すると、オブジェクトへの代入と同様に、新しい変数は同じインスタンスにアクセスします。この動作は、インスタンスを関数に渡すときと同じです。クローン作成を使用して、すでに作成されたオブジェクトの新しいインスタンスを作成できます。
Example#5 オブジェクトの割り当て
<ol class="dp-c"> <li class="alt"><span><span><?php </span></span></li><li><span class="vars">$assigned</span><span> = </span><span class="vars">$instance</span><span>; </span></li><li class="alt"><span class="vars">$reference</span><span> =& </span><span class="vars">$instance</span><span>; </span></li><li><span class="vars">$instance</span><span>-></span><span class="keyword">var</span><span> = </span><span class="string">'$assigned will have this value'</span><span>; </span></span></li> <li class="alt"> <span class="vars">$instance</span><span> = null; </span><span class="comment">// $instance and $reference become null </span><span> </span> </li> <li> <span>var_dump(</span><span class="vars">$instance</span><span>); </span> </li> <li class="alt"> <span>var_dump(</span><span class="vars">$reference</span><span>); </span> </li> <li> <span>var_dump(</span><span class="vars">$assigned</span><span>); </span> </li> <li class="alt"><span>?> </span></li> </ol>
上記のコードをコピーすると、次のように出力されます:
<ol class="dp-xml"> <li class="alt"><span><span>NULL </span></span></li> <li><span>NULL </span></li> <li class="alt"><span>object(SimpleClass)#1 (1) { </span></li> <li> <span>["var"]=</span><span class="tag">></span><span> </span> </li> <li class="alt"><span>string(30) "$assigned will have this value" </span></li> <li><span>} </span></li> </ol>
3. extends
クラスは、宣言内の extends キーワードを使用して、別のクラスのメソッドとメンバーを継承できます。複数のクラスを拡張することはできません。継承できるのは 1 つの基本クラスのみです。
継承されたメソッドとメンバーは、親クラスがメソッドを定義するときに Final キーワードを使用しない限り、同じ名前で再宣言することでオーバーライドできます。オーバーライドされたメソッドまたはメンバーには、parent:: を通じてアクセスできます。
Example#6 単純なクラスの継承
<ol class="dp-c"> <li class="alt"><span><span><?php </span></span></li><li><span class="keyword">class</span><span> ExtendClass </span><span class="keyword">extends</span><span> SimpleClass </span></li><li class="alt"><span>{ </span></li><li><span class="comment">// Redefine the parent method </span><span> </span></li><li class="alt"><span class="keyword">function</span><span> displayVar() </span></li><li><span>{ </span></li><li class="alt"><span class="func">echo</span><span> </span><span class="string">"Extending classn"</span><span>; </span></li><li><span>parent::displayVar(); </span></li><li class="alt"><span>} </span></li><li><span>} </span></li><li class="alt"><span class="vars">$extended</span><span> = </span><span class="keyword">new</span><span> ExtendClass(); </span></li><li><span class="vars">$extended</span><span>->displayVar(); </span></span></li> <li class="alt"><span>?> </span></li> </ol>
上記の例は次のように出力します。
http://www.bkjia.com/PHPjc/445764.html
www.bkjia.comtruehttp://www.bkjia.com/PHPjc/445764.html