在php的論壇中總是聽到有人對php的oop支援說三道四的,說這有缺陷,那裡不足,但是都拿不出實際的例子。原來說過要和大家說說這事,但是一直很忙,現在算是抽了些時間了,所以把我剛剛做過的乙個專案的框架拿出來和大家**一下。這個專案99%的**是用oop方式編寫的,感覺php對於oop支援非常好,不是一般的好,是非常的好。有由於專案本身是乙個商業專案所以源**不好公布出來,但是基本框架還是可以說一說的,而且經過簡化的例子更容易理解一些。如果你對php中的oop還不太了解,還是就此打住吧,先去看看手冊,或者基礎讀物再來看也不遲,反正這個是貼子沒有長腿也跑不了。
長話短說,立刻開始吧。我這裡會用到乙個簡單的例子,只有乙個半的功能。乙個是向瀏覽器傳送一句"hello, i can say oop in php world!",另外半個功能是從資料庫中進行乙個查詢然後輸出到瀏覽器,說它是半個功能是因為只是作為乙個例子講講沒有實際的資料庫操作。
首先從我的第乙個檔案index.php 開始介紹吧。我的index.php檔案是這樣的:
code:
<?php
include_once ('config.php');
?>;
這個就是全部了,雖然只有4行,但是如果用oop的方式寫這個應該就夠了吧。
和run()
所以大體上應該長成這樣
code:
<?php
function run()
} ?>;
同時我還可以把(完成功能的)每乙個頁面作為乙個物件來看待,所以我應該至少還需要兩個類
class hellopage 和
class databasepage
由於這兩個物件最終都是向瀏覽器傳送頁面所以把他們共同的部分提出來作為他們的父類
class page
以下是三個類檔案的內容
class.page.php
code:
<?php
class page
function show()
} ?>;
其中這個show方法應該是所有頁面物件都具有的方法,只是在實現上有所不同。
class.hellopage.php
code:
<?php
require_once ("class.page.php");
class hellopage extends page
function show()
} ?>;
class.databasepage.php
code:
<?php
require_once ("class.page.php");
class databasepage extends page
function show()
} ?>;
code:
<?php
function getaction()
function run()
} ?>;
為什麼getaction()空著?因為它太簡單了,你自己可以輕鬆地把它寫出來呀。
看到這裡,如果你還不太明白,不用急,可以停下來重新再看一遍。
code:
<?php
require_once ("class.database.php");
function getaction()
funciton & getdatabase()
function run()
} ?>;
你現在不用太關心這個 database物件從何而來如何實現,知道它是乙個含有資料庫連線的物件就可以了,如果用過phplib, adodb,或者pear庫的就很容易理解。
這個語句:
$this->;db = & new database(db_host,db_name,db_login,db_pass);
就是建立乙個資料庫連線而已。
至於db_host,db_name,db_login,db_pass 這些都是常量我們在config.php中已經預先設定。
由於資料庫操作頁面 databasepage 需要進行資料庫連線所以它也需要乙個變數 $db 來儲存資料庫物件,所以我們需要把databasepage改進成這樣:
class.databasepage.php
code:
<?php
require_once ("class.page.php");
class databasepage extends page
function show()
} ?>;
另外,需要提醒大家的是傳遞物件和賦值的時候要使用 & 符號這樣可以保證每次引用的是同乙個物件。
PHP物件導向 OOP 程式設計入門教程
物件導向程式設計 oop 是我們程式設計的一項基本技能,php5對oop提供了良好的支援。如何使用oop的思想來進行php的高階程式設計,對於提高 php程式設計能力和規劃好web開發構架都是非常有意義的。下面我們就通過例項來說明使用php的oop進行程式設計的實際意義和應用方法。我們通常在做乙個有...
php中的OOP語法
類宣告 class classname extends parentclass 其中,extends parentclass為繼承 php中不支援域限定符 private,public,protected等,因此所有的變數可以說都是public的。類成員宣告 var a1 類成員的使用 this a...
php中的OOP語法
類宣告 class classname extends parentclass 其中,extends parentclass為繼承 php中不支援域限定符 private,public,protected等,因此所有的變數可以說都是public的。類成員宣告 var a1 類成員的使用 this a...