オブジェクト指向プログラミング (OOP) は私たちのプログラミングの基本スキルであり、PHP4 は OOP を適切にサポートします。 OOP のアイデアを使用して PHP の高度なプログラミングを実行する方法は、PHP プログラミング能力を向上させ、優れた Web 開発アーキテクチャを計画するために非常に意味があります。以下では、例を使用して、PHP の OOP をプログラミングに使用する実際的な意義と応用方法を説明します。
通常、データベース バックエンドを使用して Web サイトを構築するとき、プログラムはさまざまなアプリケーション環境に適している必要があると考えます。他のプログラミング言語と異なるのは、PHP ではデータベースが一連の特定の関数によって操作されることです (ODBC インターフェイスを使用しない場合)。これは非常に効率的ですが、カプセル化だけでは十分ではありません。統一されたデータベース インターフェイスがあれば、プログラムに変更を加えることなく、それをさまざまなデータベースに適用できるため、プログラムの移植性とクロスプラットフォーム機能が大幅に向上します。
PHP で OOP を完成するには、オブジェクトをカプセル化する、つまりクラスを作成する必要があります。新しい SQL クラスを生成することで、データベースの単純なカプセル化を実現できます。
例:
<ol class="dp-c"> <li class="alt"><span><span>< ? </span><span class="keyword">class</span><span> SQL { </span><span class="keyword">var</span><span> </span><span class="vars">$Driver</span><span>; </span></span></li><li><span class="comment">//实际操作的数据库驱动子类 </span><span> </span></li><li class="alt"><span class="keyword">var</span><span> </span><span class="vars">$connection</span><span>; </span></li><li><span class="comment">//共用的数据库连接变量 </span><span> </span></li><li class="alt"><span class="keyword">function</span><span> DriverRegister(</span><span class="vars">$d</span><span>) { </span></li><li><span class="keyword">if</span><span>(</span><span class="vars">$d</span><span>!=</span><span class="string">""</span><span>) { </span><span class="vars">$include_path</span><span> = </span><span class="func">ini_get</span><span>(</span><span class="string">"include_path"</span><span>); </span></li><li class="alt"><span class="vars">$DriverFile</span><span> = </span><span class="vars">$include_path</span><span>.</span><span class="string">"/"</span><span>.</span><span class="vars">$d</span><span>.</span><span class="string">".php"</span><span>; </span></li><li><span class="comment">//驱动的存放路径必须在PHP.ini文件中设定的INCLUDE_PATH下 </span><span> </span></li><li class="alt"><span class="keyword">if</span><span>( </span><span class="func">file_exists</span><span>( </span><span class="vars">$DriverFile</span><span>)) </span><span class="comment">//查找驱动是否存在 </span><span> </span></li><li><span>{ </span></li><li class="alt"><span class="keyword">include</span><span>(</span><span class="vars">$DriverFile</span><span>); </span><span class="vars">$this</span><span>->Driver = </span><span class="keyword">new</span><span> </span><span class="vars">$d</span><span>(); </span></span></li> <li> <span class="comment">// 根据驱动名称生成相应的数据库驱动类 </span><span> </span> </li> <li class="alt"> <span class="keyword">return</span><span> true; </span> </li> <li><span>} </span></li> <li class="alt"><span>} </span></li> <li> <span class="keyword">return</span><span> false; </span> </li> <li class="alt"> <span class="comment">//注册驱动失败 </span><span> </span> </li> <li><span>} </span></li> <li class="alt"> <span class="keyword">function</span><span> Connect(</span><span class="vars">$host</span><span>,</span><span class="vars">$user</span><span>,</span><span class="vars">$passwd</span><span>,</span><span class="vars">$database</span><span>) </span> </li> <li> <span class="comment">//连接数据库的函数 </span><span> </span> </li> <li class="alt"> <span>{ </span><span class="vars">$this</span><span>->Driver->host=</span><span class="vars">$host</span><span>; </span> </li> <li> <span class="vars">$this</span><span>->Driver->user=</span><span class="vars">$user</span><span>; </span> </li> <li class="alt"> <span class="vars">$this</span><span>->Driver->passwd=</span><span class="vars">$pas</span><span> swd; </span> </li> <li> <span class="vars">$this</span><span>->Driver->database=</span><span class="vars">$d</span><span> atabase; </span> </li> <li class="alt"> <span class="vars">$this</span><span>->connection = </span><span class="vars">$this</span><span>->Driver->Connect(); </span> </li> <li><span>} </span></li> <li class="alt"> <span class="keyword">function</span><span> Close() </span> </li> <li> <span class="comment">//关闭数据库函数 </span><span> </span> </li> <li class="alt"><span>{ </span></li> <li> <span class="vars">$this</span><span>->Driver->close(</span><span class="vars">$this</span><span>->connection); </span> </li> <li class="alt"><span>} </span></li> <li> <span class="keyword">function</span><span> Query(</span><span class="vars">$queryStr</span><span>) </span> </li> <li class="alt"> <span class="comment">//数据库字符串查询函数 { </span><span> </span> </li> <li> <span class="keyword">return</span><span> </span><span class="vars">$this</span><span>->Driver->query(</span><span class="vars">$queryStr</span><span>,</span><span class="vars">$this</span><span>->connection); </span> </li> <li class="alt"><span>} </span></li> <li> <span class="keyword">function</span><span> getRows(</span><span class="vars">$res</span><span>) </span> </li> <li class="alt"> <span class="comment">//查找行 </span><span> </span> </li> <li><span>{ </span></li> <li class="alt"> <span class="keyword">return</span><span> </span><span class="vars">$this</span><span>->Driver->getRows(</span><span class="vars">$res</span><span>); </span> </li> <li><span>} </span></li> <li class="alt"> <span class="keyword">function</span><span> getRowsNum(</span><span class="vars">$res</span><span>) </span> </li> <li> <span class="comment">//取得行号 </span><span> </span> </li> <li class="alt"><span>{ </span></li> <li> <span class="keyword">return</span><span> </span><span class="vars">$this</span><span>->Driver-> getRowsNum (</span><span class="vars">$res</span><span>); </span> </li> <li class="alt"><span>} </span></li> <li><span>} </span></li> <li class="alt"><span>? > </span></li> </ol>
MySQL データベースの操作を例として考えてみましょう。データベース ドライバー クラス MySQL を作成します。このクラスでは、MySQL データベース操作に関連する関数をさらにカプセル化します。このクラスを含むファイルを MySQL.php という名前で PHP システムの include_path 配下に置くと、正常に使用できるようになります。データベース ドライバー ファイルを作成するときは、ファイル名がクラス名と一致している必要があることに注意してください。
<ol class="dp-c"> <li class="alt"><span><span>< ? Class MySQL { </span><span class="keyword">var</span><span> </span><span class="vars">$host</span><span>; </span><span class="keyword">var</span><span> </span><span class="vars">$user</span><span>; </span><span class="keyword">var</span><span> </span><span class="vars">$passwd</span><span>; </span><span class="keyword">var</span><span> </span><span class="vars">$database</span><span>; </span></span></li><li><span class="keyword">function</span><span> MySQL() </span></li><li class="alt"><span class="comment">//利用构造函数实现变量初始化 </span><span> </span></li><li><span>{ </span><span class="vars">$host</span><span> = </span><span class="string">""</span><span>; </span></li><li class="alt"><span class="vars">$user</span><span> = </span><span class="string">""</span><span>; </span></li><li><span class="vars">$passwd</span><span> = </span><span class="string">""</span><span>; </span></li><li class="alt"><span class="vars">$database</span><span> = </span><span class="string">""</span><span>; </span></li><li><span>} </span></li><li class="alt"><span class="keyword">function</span><span> Connect() </span></li><li><span>{ </span><span class="vars">$conn</span><span> = MySQL_connect(</span><span class="vars">$this</span><span>->host, </span><span class="vars">$this</span><span>->user,</span><span class="vars">$this</span><span>->passwd) </span></span></li> <li> <span class="keyword">or</span><span> </span><span class="keyword">die</span><span>(</span><span class="string">"Could not connect to $this->host"</span><span>); </span> </li> <li class="alt"> <span>MySQL_select_db(</span><span class="vars">$this</span><span>->database,</span><span class="vars">$conn</span><span>) </span><span class="keyword">or</span><span> </span><span class="keyword">die</span><span>(</span><span class="string">"Could not switch to database $this->database;"</span><span>); </span> </li> <li> <span class="keyword">return</span><span> </span><span class="vars">$conn</span><span>; </span> </li> <li class="alt"><span>} </span></li> <li> <span class="keyword">function</span><span> Close(</span><span class="vars">$conn</span><span>) { </span> </li> <li class="alt"> <span>MySQL_close(</span><span class="vars">$conn</span><span>); </span> </li> <li><span>} </span></li> <li class="alt"> <span class="keyword">function</span><span> Query(</span><span class="vars">$queryStr</span><span>, </span><span class="vars">$conn</span><span>) </span> </li> <li><span>{ </span></li> <li class="alt"> <span class="vars">$res</span><span> =MySQL_query(</span><span class="vars">$queryStr</span><span>, </span><span class="vars">$conn</span><span>) </span><span class="keyword">or</span><span> </span><span class="keyword">die</span><span>(</span><span class="string">"Could not query database"</span><span>); </span> </li> <li> <span class="keyword">return</span><span> </span><span class="vars">$res</span><span>; </span> </li> <li class="alt"><span>} </span></li> <li> <span class="keyword">function</span><span> getRows(</span><span class="vars">$res</span><span>) </span> </li> <li class="alt"><span>{ </span></li> <li> <span class="vars">$rowno</span><span> = 0; </span> </li> <li class="alt"> <span class="vars">$rowno</span><span> = MySQL_num_rows(</span><span class="vars">$res</span><span>); </span> </li> <li> <span class="keyword">if</span><span>(</span><span class="vars">$rowno</span><span>>0) </span> </li> <li class="alt"><span>{ </span></li> <li> <span class="keyword">for</span><span>(</span><span class="vars">$row</span><span>=0;</span><span class="vars">$row</span><span><</span><span class="vars">$rowno</span><span>;</span><span class="vars">$row</span><span>++) </span></li><li class="alt"><span>{ </span></li><li><span class="vars">$rows</span><span>[</span><span class="vars">$row</span><span>]=MySQL_fetch_row(</span><span class="vars">$res</span><span>); </span></li><li class="alt"><span>} </span></li><li><span class="keyword">return</span><span> </span><span class="vars">$rows</span><span>; </span></li><li class="alt"><span>} </span></li><li><span>} </span></li><li class="alt"><span class="keyword">function</span><span> getRowsNum(</span><span class="vars">$res</span><span>) </span></li><li><span>{ </span></li><li class="alt"><span class="vars">$rowno</span><span> = 0; </span></li><li><span class="vars">$rowno</span><span> = mysql_num_rows(</span><span class="vars">$res</span><span>); </span><span class="keyword">return</span><span> </span><span class="vars">$rowno</span><span>; </span></li><li class="alt"><span>} } ? > </span> </li> </ol>
同様に、他の「データベースドライバー」を SQL クラスにカプセル化する必要があります。対応するクラスを作成し、ドライバーファイルに同じ名前を付けて、PHP の include ディレクトリに置くだけです。
カプセル化が完了したら、OOP のアイデアに従って PHP でデータベースをプログラムできます。
<ol class="dp-c"> <li class="alt"><span><span>< ? Include(“SQL.php”); </span></span></li><li><span class="vars">$sql</span><span> = </span><span class="keyword">new</span><span> SQL; </span></li><li class="alt"><span class="comment">//生成新的Sql对象 </span><span> </span></li><li><span class="keyword">if</span><span>(</span><span class="vars">$sql</span><span>-> DriverRegister(“MySQL”)) </span></span></li> <li class="alt"> <span class="comment">//注册数据库驱动 </span><span> </span> </li> <li><span>{ </span></li> <li class="alt"> <span class="vars">$sql</span><span>->Connect(“localhost”,”root”,””,”test”); </span> </li> <li> <span class="vars">$res</span><span>=</span><span class="vars">$sql</span><span>->query(“select * from test”); </span> </li> <li class="alt"> <span class="comment">//返回查询记录集 </span><span> </span> </li> <li> <span class="vars">$rowsnum</span><span> = </span><span class="vars">$sql</span><span>->getRowsNum(</span><span class="vars">$res</span><span>); </span> </li> <li class="alt"> <span class="keyword">if</span><span>(</span><span class="vars">$rowsnum</span><span> > 0) { </span> </li> <li> <span class="vars">$rows</span><span> = </span><span class="vars">$sql</span><span>->getRows(</span><span class="vars">$res</span><span>); </span> </li> <li class="alt"> <span class="keyword">foreach</span><span>(</span><span class="vars">$rows</span><span> </span><span class="keyword">as</span><span> </span><span class="vars">$row</span><span>) </span> </li> <li> <span class="comment">//循环取出记录集内容 { </span><span> </span> </li> <li class="alt"> <span class="keyword">foreach</span><span>(</span><span class="vars">$row</span><span> </span><span class="keyword">as</span><span> </span><span class="vars">$field</span><span>){ print </span><span class="vars">$field</span><span>;} } } </span><span class="vars">$sql</span><span>->Close(); </span> </li> <li><span>} ? > </span></li> </ol>
実際のアプリケーションでは、実際のニーズに応じてさまざまなオブジェクト クラスをさらに拡張できます。 PHP では、継承、オーバーロード、参照、シリアル化などの一連の複雑な OOP メソッドも提供されます。さまざまな手法を総動員して柔軟に活用することで、Webサイトをより合理的かつ構造的にし、開発や保守を容易にすることができます。
上記の内容のご紹介がお役に立てれば幸いです。