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网页后退不再出现过期
Mar 08 PHP
PHP5.2下chunk_split()函数整数溢出漏洞 分析
Jun 06 PHP
PHP 多进程 解决难题
Jun 22 PHP
PHP 修复未正常关闭的HTML标签实现代码(支持嵌套和就近闭合)
Jun 07 PHP
浅析Yii中使用RBAC的完全指南(用户角色权限控制)
Jun 20 PHP
php 字符串压缩方法比较示例
Jan 23 PHP
php中Session的生成机制、回收机制和存储机制探究
Aug 19 PHP
CI(Codeigniter)的Setting增强配置类实例
Jan 06 PHP
PHP创建多级目录的两种方法
Oct 28 PHP
laravel5.4生成验证码的实例讲解
Aug 05 PHP
PHP创建自己的Composer包方法
Apr 09 PHP
laravel Task Scheduling(任务调度)在windows下的使用详解
Oct 22 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批量删除操作(数据访问)
2017/05/23 PHP
JavaScript 拖拉缩放效果
2008/12/10 Javascript
jQuery 表单验证扩展(三)
2010/10/20 Javascript
JS图片浏览组件PhotoLook的公开属性方法介绍和进阶实例代码
2010/11/09 Javascript
High Performance JavaScript(高性能JavaScript)读书笔记分析
2011/05/05 Javascript
基于javascipt-dom编程 table对象的使用
2013/04/22 Javascript
JS使用replace()方法和正则表达式进行字符串的搜索与替换实例
2014/04/10 Javascript
php和js对数据库图片进行等比缩放示例
2014/04/28 Javascript
判断复选框是否被选中的两种方法
2014/06/04 Javascript
javascript格式化日期时间方法汇总
2015/06/19 Javascript
基于jquery实现复选框全选,反选,全不选等功能
2015/10/16 Javascript
一不小心就做错的JS闭包面试题
2015/11/25 Javascript
node.js插件nodeclipse安装图文教程
2020/10/19 Javascript
ES6中的数组扩展方法
2016/08/26 Javascript
jquery动态添加文本并获取值的方法
2016/10/12 Javascript
微信小程序 数据绑定及运算的简单实例
2017/09/20 Javascript
利用jQuery+localStorage实现一个简易的计时器示例代码
2017/12/25 jQuery
微信小程序实现弹出菜单功能
2018/06/12 Javascript
详解vue+webpack+express中间件接口使用
2018/07/17 Javascript
vue操作下拉选择器获取选择的数据的id方法
2018/08/24 Javascript
基于VUE实现的九宫格抽奖功能
2018/09/30 Javascript
elementUI vue this.$confirm 和el-dialog 弹出框 移动 示例demo
2019/07/03 Javascript
Python 错误和异常小结
2013/10/09 Python
python使用chardet判断字符串编码的方法
2015/03/13 Python
在Python的Django框架中实现Hacker News的一些功能
2015/04/17 Python
Python 复平面绘图实例
2019/11/21 Python
Python注释、分支结构、循环结构、伪“选择结构”用法实例分析
2020/01/09 Python
tensorflow 利用expand_dims和squeeze扩展和压缩tensor维度方式
2020/02/07 Python
英国高档时尚男装购物网站:MR PORTER
2016/08/09 全球购物
Spongelle官网:美国的创意护肤洗护品牌
2019/05/15 全球购物
Tahari ASL官方网站:高级设计师女装
2021/03/15 全球购物
管理工程专业求职信
2014/08/10 职场文书
2014年环保局工作总结
2014/12/11 职场文书
OpenCV-Python使用cv2实现傅里叶变换
2021/06/09 Python
python模块与C和C++动态库相互调用实现过程示例
2021/11/02 Python
nginx代理实现静态资源访问的示例代码
2022/07/07 Servers