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 工厂模式使用方法
May 18 PHP
用PHP实现的四则运算表达式计算实现代码
Aug 02 PHP
解析PHP SPL标准库的用法(遍历目录,查找固定条件的文件)
Jun 18 PHP
smarty模板中拼接字符串的方法
Feb 14 PHP
小谈php正则提取图片地址
Mar 27 PHP
php使用数组填充下拉列表框的方法
Mar 31 PHP
php经典算法集锦
Nov 14 PHP
CI框架(ajax分页,全选,反选,不选,批量删除)完整代码详解
Nov 01 PHP
Yii2实现log输出到file及database的方法
Nov 12 PHP
PHP数据库操作二:memcache用法分析
Aug 16 PHP
thinkphp5+layui实现的分页样式示例
Oct 08 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学习 函数 课件
2008/06/15 PHP
php入门学习知识点二 PHP简单的分页过程与原理
2011/07/14 PHP
php中3种方法删除字符串中间的空格
2014/03/10 PHP
PHP中对各种加密算法、Hash算法的速度测试对比代码
2014/07/08 PHP
php微信支付之APP支付方法
2015/03/04 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
2017/08/31 PHP
PHP7基于curl实现的上传图片功能
2018/05/11 PHP
laravel与thinkphp之间的区别与优缺点
2021/03/02 PHP
JavaScript 选中文字并响应获取的实现代码
2011/08/28 Javascript
JQUERY1.6 使用方法四 检测浏览器
2011/11/23 Javascript
鼠标滚轮改变图片大小的示例代码
2013/11/20 Javascript
tangram框架响应式加载图片方法
2013/11/21 Javascript
纯Javascript实现ping功能的方法
2015/03/20 Javascript
jQuery实现自动调整字体大小的方法
2015/06/15 Javascript
JavaScript中undefined和null的区别
2017/05/03 Javascript
微信小程序实现收藏与取消收藏切换图片功能
2018/08/03 Javascript
教你如何编写Vue.js的单元测试的方法
2018/10/17 Javascript
详解Node.js异步处理的各种写法
2019/06/09 Javascript
基于vue实现圆形菜单栏组件
2019/07/05 Javascript
React学习之受控组件与数据共享实例分析
2020/01/06 Javascript
JavaScript事件冒泡机制原理实例解析
2020/01/14 Javascript
JS实现简易计算器
2020/02/14 Javascript
js构造函数constructor和原型prototype原理与用法实例分析
2020/03/02 Javascript
Vue Cli3 打包配置并自动忽略console.log语句的方法
2020/04/23 Javascript
解决antd Form 表单校验方法无响应的问题
2020/10/27 Javascript
python anaconda 安装 环境变量 升级 以及特殊库安装的方法
2017/06/21 Python
python多进程使用函数封装实例
2020/05/02 Python
关于Python 解决Python3.9 pandas.read_excel(‘xxx.xlsx‘)报错的问题
2020/11/28 Python
迟到检讨书300字
2014/02/14 职场文书
篮球兴趣小组活动总结
2014/07/07 职场文书
招商引资工作汇报
2014/10/28 职场文书
2015年师德师风自我评价范文
2015/03/05 职场文书
毛主席纪念堂观后感
2015/06/17 职场文书
教师继续教育反思周记
2015/06/25 职场文书
pytorch训练神经网络爆内存的解决方案
2021/05/22 Python
部分武汉产收音机展览
2022/04/07 无线电