PHP面向对象编程快速入门


Posted in PHP onOctober 09, 2006

   面向对象编程(OOP)是我们编程的一项基本技能,PHP4对OOP提供了良好的支持。如何使用OOP的思想来进行PHP的高级编程,对于提高PHP编程能力和规划好Web开发构架都是非常有意义的。下面我们就通过实例来说明使用PHP的OOP进行编程的实际意义和应用方法。 

我们通常在做一个有数据库后台的网站的时候,都会考虑到程序需要适用于不同的应用环境。和其他编程语言有所不同的是,在PHP中,操作数据库的是一系列的具体功能函数(如果你不使用ODBC接口的话)。这样做虽然效率很高,但是封装却不够。如果有一个统一的数据库接口,那么我们就可以不对程序做任何修改而适用于多种数据库,从而使程序的移植性和跨平台能力都大大提高。 

在PHP中要完成OOP,需要进行对象封装,也就是编写类。我们可以通过生成一个新的SQL类实现对数据库的简单封装。例如: 

< ? 
class SQL 

var $Driver; //实际操作的数据库驱动子类 
var $connection; //共用的数据库连接变量 
function DriverRegister($d) 

if($d!="") 

$include_path = ini_get("include_path"); 
$DriverFile = $include_path."/".$d.".php"; 
//驱动的存放路径必须在PHP.ini文件中设定的INCLUDE_PATH下 
if( file_exists( $DriverFile)) //查找驱动是否存在 

include($DriverFile); 
$this->Driver = new $d(); 
// 根据驱动名称生成相应的数据库驱动类 
return true; 


return false; //注册驱动失败 

function Connect($host,$user,$passwd,$database)//连接数据库的函数 

$this->Driver->host=$host; 
$this->Driver->user=$user; 
$this->Driver->passwd=$pas 
swd; 
$this->Driver->database=$d 
atabase; 
$this->connection = $this->Driver->Connect(); 

function Close()//关闭数据库函数 

$this->Driver->close($this->connection); 

function Query($queryStr)//数据库字符串查询函数 

return $this->Driver->query($queryStr,$this->connection); 

function getRows($res)//查找行 

return $this->Driver->getRows($res); 

function getRowsNum($res)//取得行号 

return $this->Driver-> getRowsNum ($res); 


? > 

我们以操作MySQL数据库为例。我们写一个数据库驱动类MySQL,在该类中,我们把有关MySQL数据库操作的函数都做进一步的封装。把包含该类,文件名为MySQL.php的文件放在PHP的系统 include_path下,就可以正常地使用了。注意编写数据库驱动文件时,文件名应和类名保持一致。

< ? 
Class MySQL 

var $host; 
var $user; 
var $passwd; 
var $database; 
function MySQL() //利用构造函数实现变量初始化 

$host = ""; 
$user = ""; 
$passwd = ""; 
$database = ""; 

function Connect() 

$conn = MySQL_connect($this->host, $this->user,$this->passwd) or 
die("Could not connect to $this->host"); 
MySQL_select_db($this->database,$conn) or 
die("Could not switch to database $this->database;"); 
return $conn; 

function Close($conn) 

MySQL_close($conn); 

function Query($queryStr, $conn) 

$res =MySQL_query($queryStr, $conn) or 
die("Could not query database"); 
return $res; 

function getRows($res) 

$rowno = 0; 
$rowno = MySQL_num_rows($res); 
if($rowno>0) 

for($row=0;$row<$rowno;$row++) 

$rows[$row]=MySQL_fetch_row($res); 

return $rows; 


function getRowsNum($res) 

$rowno = 0; 
$rowno = mysql_num_rows($res); 
return $rowno; 


? > 

同样我们要封装其他的“数据库驱动”到我们的SQL类中,只需要建立相应的类,并以同名命名驱动文件,放到PHP的include目录就可以了。 

完成封装以后,就可以在PHP中按照OOP的思想来实现对数据库的编程了。

< ? 
Include(“SQL.php”); 
$sql = new SQL; //生成新的Sql对象 
if($sql-> DriverRegister(“MySQL”)) //注册数据库驱动 

$sql->Connect(“localhost”,”root”,””,”test”); 
$res=$sql->query(“select * from test”); //返回查询记录集 
$rowsnum = $sql->getRowsNum($res); 
if($rowsnum > 0) 

$rows = $sql->getRows($res); 
foreach($rows as $row) //循环取出记录集内容 

foreach($row as $field){ 
print $field;} 


$sql->Close(); 

? > 

在实际应用中,我们还可以根据实际需求对各种对象类做进一步扩展。在PHP中,还提供了一系列复杂的OOP方法,例如继承,重载,引用,串行化等等。充分调动各种方法并灵活运用,就能够使你的网站更合理和结构化,开发和维护也更容易。

PHP 相关文章推荐
mysql 字段类型说明
Apr 27 PHP
php in_array 函数使用说明与in_array需要注意的地方说明
Apr 13 PHP
php的日期处理函数及uchome的function_coomon中日期处理函数的研究
Jan 12 PHP
Apache实现Web Server负载均衡详解(不考虑Session版)
Jul 05 PHP
PHP批量上传图片的具体实现方法介绍.
Feb 26 PHP
php验证是否是md5编码的简单代码
Apr 01 PHP
PHP实现生成唯一编号(36进制的不重复编号)
Jul 01 PHP
php学习笔记之基础知识
Nov 08 PHP
thinkPHP学习笔记之安装配置篇
Mar 05 PHP
PHP whois查询类定义与用法示例
Apr 03 PHP
tp5(thinkPHP5框架)使用DB实现批量删除功能示例
May 28 PHP
Laravel 微信小程序后端实现用户登录的示例代码
Nov 26 PHP
PHP模拟SQL Server的两个日期处理函数
Oct 09 #PHP
PHP实现的功能是显示8条基色色带
Oct 09 #PHP
提升PHP执行速度全攻略(上)
Oct 09 #PHP
提升PHP执行速度全攻略(下)
Oct 09 #PHP
如何过滤高亮显示非法字符
Oct 09 #PHP
无限级别菜单的实现
Oct 09 #PHP
综合图片计数器
Oct 09 #PHP
You might like
全国FM电台频率大全 - 22 重庆市
2020/03/11 无线电
PHP几个实用自定义函数小结
2016/01/25 PHP
php四种定界符详解
2017/02/16 PHP
laravel 错误处理,接口错误返回json代码
2019/10/25 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
2020/04/04 PHP
JAVASCRIPT下判断IE与FF的比较简单的方式
2008/10/17 Javascript
新手常遇到的一些jquery问题整理
2010/08/16 Javascript
使用jQuery.fn自定义jQuery翻页插件
2013/01/20 Javascript
jQuery通过点击行来删除HTML表格行的实现示例
2014/09/10 Javascript
JQuery中DOM实现事件移除的方法
2015/06/13 Javascript
Node.js中的process.nextTick使用实例
2015/06/25 Javascript
Bootstrap项目实战之首页内容介绍(全)
2016/04/25 Javascript
前端开发必知的15个jQuery小技巧
2017/01/22 Javascript
微信小程序实现登录页云层漂浮的动画效果
2017/05/05 Javascript
Angularjs自定义指令Directive详解
2017/05/27 Javascript
JavaScript 中Date对象的格式化代码方法汇总
2017/09/06 Javascript
vue用BMap百度地图实现即时搜索功能
2019/09/26 Javascript
python根据unicode判断语言类型实例代码
2018/01/17 Python
Python Logging 日志记录入门学习
2018/06/02 Python
python文本数据处理学习笔记详解
2019/06/17 Python
python/golang 删除链表中的元素
2020/09/14 Python
Python+unittest+requests+excel实现接口自动化测试框架
2020/12/23 Python
Parfume Klik丹麦:香水网上商店
2018/07/10 全球购物
澳大利亚儿童鞋在线:The Trybe
2019/07/16 全球购物
测绘工程本科生求职信
2013/10/10 职场文书
文秘大学生求职信
2014/02/25 职场文书
《美丽的小路》教学反思
2014/02/26 职场文书
《散步》教学反思
2014/03/02 职场文书
工厂门卫岗位职责范本
2014/04/04 职场文书
我的梦想演讲稿
2014/04/30 职场文书
应用外语系自荐信
2014/06/26 职场文书
捐助倡议书
2015/01/19 职场文书
2016年教师寒假学习心得体会
2015/10/09 职场文书
Python中zipfile压缩包模块的使用
2021/05/14 Python
Python实现Hash算法
2022/03/18 Python
HTML常用标签超详细整理
2022/03/19 HTML / CSS