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 相关文章推荐
在PHP中使用Sockets 从Usenet中获取文件
Jan 10 PHP
PHP 的ArrayAccess接口 像数组一样来访问你的PHP对象
Oct 12 PHP
yii实现级联下拉菜单的方法
Jul 31 PHP
php绘制圆形的方法
Jan 24 PHP
php给图片加文字水印
Jul 31 PHP
php实现的xml操作类
Jan 15 PHP
PHP 二维数组和三维数组的过滤
Mar 16 PHP
分析PHP中单双引号的误区和双引号小隐患
Jul 19 PHP
PHP4和PHP5版本下解析XML文档的操作方法实例分析
May 20 PHP
利用PHP获取访客IP、地区位置、浏览器及来源页面等信息
Jun 27 PHP
php mysql数据库操作类(实例讲解)
Aug 06 PHP
php实现登录页面的简单实例
Sep 29 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
用php随机生成福彩双色球号码的2种方法
2013/02/04 PHP
PHP上传图片进行等比缩放可增加水印功能
2014/01/13 PHP
PHP实现简单ajax Loading加载功能示例
2016/12/28 PHP
JScript内置对象Array中元素的删除方法
2007/03/08 Javascript
jquery animate图片模向滑动示例代码
2011/01/26 Javascript
基于jQuery的可用于选项卡及幻灯的切换插件
2011/03/28 Javascript
javascript对select标签的控制(option选项/select)
2013/01/31 Javascript
HTML页面滚动时获取离页面顶部的距离2种实现方法
2013/09/05 Javascript
javascript中递归的两种写法
2017/01/17 Javascript
Node层模拟实现multipart表单的文件上传示例
2018/01/02 Javascript
AjaxUpLoad.js实现文件上传
2018/03/05 Javascript
深入解析koa之异步回调处理
2019/06/17 Javascript
jQuery实现获取多选框的值示例
2020/02/07 jQuery
js实现贪吃蛇游戏(简易版)
2020/09/29 Javascript
[52:08]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第一局
2016/03/05 DOTA
Python 类的继承实例详解
2017/03/25 Python
在Python中使用AOP实现Redis缓存示例
2017/07/11 Python
vscode 远程调试python的方法
2017/12/01 Python
python使用thrift教程的方法示例
2019/03/21 Python
python PyQt5/Pyside2 按钮右击菜单实例代码
2019/08/17 Python
美国隐形眼镜销售网站:ContactsDirect
2017/10/28 全球购物
NBA德国官方网上商店:NBA Store德国
2018/04/13 全球购物
班长岗位职责
2013/11/10 职场文书
大二学生学习个人自我评价
2014/01/19 职场文书
食品业务员岗位职责
2014/03/18 职场文书
市级优秀班主任事迹材料
2014/05/13 职场文书
食品安全处置方案
2014/06/14 职场文书
房地产资料员岗位职责
2014/07/02 职场文书
竞选班干部演讲稿300字
2014/08/20 职场文书
学习张丽丽心得体会
2014/09/03 职场文书
2014年酒店年度工作总结
2014/12/10 职场文书
逃课检讨书
2015/01/26 职场文书
民间借贷借条范本
2015/05/25 职场文书
情况说明书怎么写
2015/10/08 职场文书
公司要求试用期员工提交“述职报告”,该怎么写?
2019/07/17 职场文书
浅谈Redis变慢的原因及排查方法
2022/06/21 Redis