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 相关文章推荐
火车头采集器3.0采集图文教程
Mar 17 PHP
给apache2.2加上mod_encoding模块後 php5.2.0 处理url出现bug
Apr 12 PHP
基于php常用正则表达式的整理汇总
Jun 08 PHP
根据ip调用新浪api获取城市名并转成拼音
Mar 07 PHP
php读取目录所有文件信息dir示例
Mar 18 PHP
PHP清除数组中所有字符串两端空格的方法
Oct 20 PHP
PHP使用socket发送HTTP请求的方法
Feb 14 PHP
PHP getallheaders无法获取自定义头(headers)的问题
Mar 23 PHP
php数据序列化测试实例详解
Aug 12 PHP
PHP下用Swoole实现Actor并发模型的方法
Jun 12 PHP
Yii2.0框架模型添加/修改/删除数据操作示例
Jul 18 PHP
php源码的使用方法讲解
Sep 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
《星际争霸》各版本雷兽特点图文解析 雷兽不同形态一览
2020/03/02 星际争霸
对javascript和select部件的结合运用
2006/10/09 PHP
php实现的二叉树遍历算法示例
2017/06/15 PHP
php7函数,声明,返回值等新特性介绍
2018/05/25 PHP
windows 2008r2+php5.6.28环境搭建详细过程
2019/06/18 PHP
JavaScript isArray()函数判断对象类型的种种方法
2010/10/11 Javascript
Javascript创建自定义对象 创建Object实例添加属性和方法
2012/06/04 Javascript
jquery设置按钮停顿3秒不可用
2014/03/07 Javascript
javascript中的取反再取反~~没有意义
2014/04/06 Javascript
JavaScript中innerHTML,innerText,outerHTML的用法及区别
2015/09/01 Javascript
常用的Javascript设计模式小结
2015/12/09 Javascript
Angular实现的简单定时器功能示例
2017/12/28 Javascript
Django+vue跨域问题解决的详细步骤
2019/01/20 Javascript
微信小程序实现的绘制table表格功能示例
2019/04/26 Javascript
Vue在chrome44偶现点击子元素事件无法冒泡的解决方法
2019/12/15 Javascript
JavaScript Window窗口对象属性和使用方法
2020/01/19 Javascript
阿望教你用vue写扫雷小游戏
2020/01/20 Javascript
vue 将多个过滤器封装到一个文件中的代码详解
2020/09/05 Javascript
js实现验证码干扰(静态)
2021/02/22 Javascript
Python是编译运行的验证方法
2015/01/30 Python
轻松实现TensorFlow微信跳一跳的AI
2018/01/05 Python
Python分支结构(switch)操作简介
2018/01/17 Python
Pandas0.25来了千万别错过这10大好用的新功能
2019/08/07 Python
Python3搭建http服务器的实现代码
2020/02/11 Python
python进行OpenCV实战之画图(直线、矩形、圆形)
2020/08/27 Python
js实现移动端H5页面手指滑动刻度尺功能
2017/11/16 HTML / CSS
WiFi云数码相框:Nixplay
2018/07/05 全球购物
金鑫耀Java笔试题
2014/09/06 面试题
应届生污水处理求职信
2013/11/06 职场文书
物流专业大学生的自我鉴定
2013/11/13 职场文书
自荐信格式
2013/12/01 职场文书
经理助理岗位职责
2014/03/05 职场文书
国窖1573广告词
2014/03/21 职场文书
班级学习计划书
2014/04/27 职场文书
导游词之千岛湖
2019/09/23 职场文书
为什么代码规范要求SQL语句不要过多的join
2021/06/23 MySQL