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 获取客户端真实IP地址多种方法小结
May 15 PHP
php模拟asp中的XmlHttpRequest实现http请求的代码
Mar 24 PHP
PHP中HTML标签过滤技巧
Jan 07 PHP
几道坑人的PHP面试题 试试看看你会不会也中招
Aug 19 PHP
thinkphp的静态缓存用法分析
Nov 29 PHP
PHP之预定义接口详解
Jul 29 PHP
php+ajax实现带进度条的上传图片功能【附demo源码下载】
Sep 14 PHP
PHP中include()与require()的区别说明
Feb 14 PHP
phpMyAdmin无法登陆的解决方法
Apr 27 PHP
php 截取中英文混合字符串的方法
May 31 PHP
Laravel关系模型指定条件查询方法
Oct 10 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序列号生成函数和字符串替换函数代码
2012/06/07 PHP
面向对象的Javascript之一(初识Javascript)
2012/01/20 Javascript
setTimeout函数兼容各主流浏览器运行执行效果实例
2013/06/13 Javascript
jquery 页面滚动到底部自动加载插件集合
2014/01/31 Javascript
浅谈jquery回调函数callback的使用
2015/01/30 Javascript
javascript运动效果实例总结(放大缩小、滑动淡入、滚动)
2016/01/08 Javascript
JQueryEasyUI之DataGrid数据显示
2016/11/23 Javascript
分享一道关于闭包、bind和this的面试题
2017/02/20 Javascript
Angular中封装fancyBox(图片预览)遇到问题小结
2017/09/01 Javascript
深入理解Vue2.x的虚拟DOM diff原理
2017/09/27 Javascript
jQuery实现的滑块滑动导航效果示例
2018/06/04 jQuery
深入理解JavaScript的async/await
2018/08/05 Javascript
微信小程序开发之自定义tabBar的实现
2018/09/06 Javascript
NodeJS搭建HTTP服务器的实现步骤
2018/10/12 NodeJs
js实现ATM机存取款功能
2020/10/27 Javascript
js实现双色球效果
2020/08/02 Javascript
python实现list元素按关键字相加减的方法示例
2017/06/09 Python
Python 基于wxpy库实现微信添加好友功能(简洁)
2019/11/29 Python
从零开始的TensorFlow+VScode开发环境搭建的步骤(图文)
2020/08/31 Python
如何用Python 加密文件
2020/09/10 Python
GOOD AMERICAN官网:为曲线性感而设计
2017/12/28 全球购物
YOOX台湾:意大利奢侈品电商
2018/10/13 全球购物
销售主管的自我评价分享
2014/01/03 职场文书
军神教学反思
2014/02/04 职场文书
物业经理自我鉴定
2014/03/03 职场文书
会计自荐信范文
2014/03/09 职场文书
高校教师岗位职责
2014/03/18 职场文书
超越自我演讲稿
2014/05/21 职场文书
参赛口号
2014/06/16 职场文书
婚礼答谢词
2015/01/04 职场文书
校车安全管理责任书
2015/05/11 职场文书
公司董事任命书
2015/09/21 职场文书
职场:企业印章管理制度(模板)
2019/10/18 职场文书
go语言基础 seek光标位置os包的使用
2021/05/09 Golang
浅谈Python类的单继承相关知识
2021/05/12 Python
python函数的两种嵌套方法使用
2022/04/02 Python