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 相关文章推荐
我常用的几个类
Oct 09 PHP
虚拟主机中对PHP的特殊设置
Oct 09 PHP
如何提高MYSQL数据库的查询统计速度 select 索引应用
Apr 11 PHP
基于php iconv函数的使用详解
Jun 09 PHP
codeigniter使用技巧批量插入数据实例方法分享
Dec 31 PHP
PHP获取本周第一天和最后一天示例代码
Feb 24 PHP
php中current、next与reset函数用法实例
Nov 17 PHP
php基于curl重写file_get_contents函数实例
Nov 08 PHP
php smtp实现发送邮件功能
Jun 22 PHP
PHP Trait代码复用类与多继承实现方法详解
Jun 17 PHP
修改Laravel自带的认证系统的User类的命名空间的步骤
Oct 15 PHP
php 比较获取两个数组相同和不同元素的例子(交集和差集)
Oct 18 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电台频率大全 - 27 陕西省
2020/03/11 无线电
php calender(日历)二个版本代码示例(解决2038问题)
2013/12/24 PHP
twig里使用js变量的方法
2016/02/05 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
2017/08/31 PHP
PHP迭代器接口Iterator用法分析
2017/12/28 PHP
img的onload的另类用法
2008/01/10 Javascript
ExtJS 学习专题(一) 如何应用ExtJS(附实例)
2010/03/11 Javascript
FireFox下XML对象转化成字符串的解决方法
2011/12/09 Javascript
利用cookie记住背景颜色示例代码
2013/11/04 Javascript
JavaScript实现随机替换图片的方法
2015/04/16 Javascript
被遗忘的javascript的slice() 方法
2015/04/20 Javascript
jquery ui dialog替代confirm实例分析
2016/01/25 Javascript
JS正则替换去空格的方法
2017/03/24 Javascript
使用Angular CLI生成路由的方法
2018/03/24 Javascript
彻底弄懂 JavaScript 执行机制
2018/10/23 Javascript
教你如何用Node实现API的转发(某音乐)
2019/09/20 Javascript
微信小程序scroll-view实现滚动到锚点左侧导航栏点餐功能(点击种类,滚动到锚点)
2020/06/11 Javascript
vue2.0 解决抽取公用js的问题
2020/07/31 Javascript
详解React中共享组件逻辑的三种方式
2021/02/02 Javascript
详细介绍Ruby中的正则表达式
2015/04/10 Python
python aiohttp的使用详解
2019/06/20 Python
python使用Qt界面以及逻辑实现方法
2019/07/10 Python
Pandas对DataFrame单列/多列进行运算(map, apply, transform, agg)
2020/06/14 Python
python删除指定列或多列单个或多个内容实例
2020/06/28 Python
python调用摄像头的示例代码
2020/09/28 Python
探究 canvas 绘图中撤销(undo)功能的实现方式详解
2018/05/17 HTML / CSS
彪马土耳其官网:PUMA土耳其
2019/07/14 全球购物
Hello Molly美国:女性时尚在线
2019/08/26 全球购物
成功经营餐厅的创业计划书范文
2013/12/26 职场文书
军训感想500字
2014/02/20 职场文书
大学军训感言400字
2014/03/11 职场文书
2015年度质量工作总结报告
2015/04/27 职场文书
公司劳动纪律管理制度
2015/08/04 职场文书
企业转让协议书(范文2篇)
2019/08/15 职场文书
React 并发功能体验(前端的并发模式)
2021/07/01 Javascript
浅谈JavaScript浅拷贝和深拷贝
2021/11/07 Javascript