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 相关文章推荐
php5 and xml示例
Nov 22 PHP
php模拟js函数unescape的函数代码
Oct 20 PHP
浅析php面向对象public private protected 访问修饰符
Jun 30 PHP
Yii操作数据库的3种方法
Mar 11 PHP
10款PHP开源商城系统汇总介绍
Jul 23 PHP
PHP7.0安装笔记整理
Aug 28 PHP
详解PHP中instanceof关键字及instanceof关键字有什么作用
Nov 05 PHP
php表单处理操作
Nov 16 PHP
PHP 模拟登陆功能实例详解
Sep 10 PHP
PHP配合fiddler抓包抓取微信指数小程序数据的实现方法分析
Jan 02 PHP
PHP实现文件上传与下载
Aug 28 PHP
PHP数组Key强制类型转换实现原理解析
Sep 01 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函数
2010/01/11 PHP
PHP中的多行字符串传递给JavaScript的两种方法
2014/06/19 PHP
PHP ignore_user_abort函数详细介绍和使用实例
2014/07/15 PHP
用js实现预览待上传的本地图片
2007/03/15 Javascript
js校验表单后提交表单的三种方法总结
2014/02/28 Javascript
改变状态栏文字的js代码
2014/06/13 Javascript
DOM事件阶段以及事件捕获与事件冒泡先后执行顺序(图文详解)
2015/08/18 Javascript
javascript生成img标签的3种实现方法(对象、方法、html)
2015/12/25 Javascript
JS基于MSClass和setInterval实现ajax定时采集信息并滚动显示的方法
2016/04/18 Javascript
基于jquery插件实现拖拽删除图片功能
2020/08/27 Javascript
浅析JavaScript中break、continue和return的区别
2016/11/30 Javascript
Vue指令的钩子函数使用方法
2017/03/20 Javascript
浅谈vue的踩坑路
2017/08/31 Javascript
JS实现点击li标签弹出对应的索引功能【案例】
2019/02/18 Javascript
微信小程序--特定区域滚动到顶部时固定的方法
2019/04/28 Javascript
jquery实现垂直手风琴导航栏
2020/02/18 jQuery
JS XMLHttpRequest原理与使用方法深入详解
2020/04/30 Javascript
Element InputNumber计数器的使用方法
2020/07/27 Javascript
VsCode里的Vue模板的实现
2020/08/12 Javascript
10分钟学会js处理json的常用方法
2020/12/06 Javascript
[02:39]DOTA2英雄基础教程 极限穿梭编织者
2013/12/05 DOTA
[01:03:54]Liquid vs IG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python对小数进行除法运算的正确方法示例
2014/08/25 Python
Python安装第三方库的3种方法
2015/06/21 Python
Python方法的延迟加载的示例代码
2017/12/18 Python
python线程池threadpool实现篇
2018/04/27 Python
python opencv旋转图像(保持图像不被裁减)
2018/07/26 Python
python 递归深度优先搜索与广度优先搜索算法模拟实现
2018/10/22 Python
利用Pycharm断点调试Python程序的方法
2018/11/29 Python
解决python replace函数替换无效问题
2020/01/18 Python
解决python3输入的坑——input()
2020/12/05 Python
CSS3绘制不规则图形的一些方法示例
2015/11/07 HTML / CSS
澳大利亚在线家具店:Luxo Living
2019/03/24 全球购物
越南综合购物网站:Lazada越南
2019/06/10 全球购物
中国古代史学名著《战国策》概述
2019/08/09 职场文书
教你如何使用Python实现二叉树结构及三种遍历
2021/06/18 Python