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发送邮件类代码附详细说明
Jul 10 PHP
php仿ZOL分页类代码
Oct 02 PHP
PHP 获取客户端真实IP地址多种方法小结
May 15 PHP
浅析ThinkPHP中execute和query方法的区别
Jun 13 PHP
php获取客户端电脑屏幕参数的方法
Jan 09 PHP
十幅图告诉你什么是PHP引用
Feb 22 PHP
Apache连接PHP后无法启动问题解决思路
Jun 18 PHP
Thinkphp关闭缓存的方法
Jun 26 PHP
php实现数字补零的方法总结
Sep 12 PHP
PHP PDOStatement::bindParam讲解
Jan 30 PHP
Laravel Eloquent分表方法并使用模型关联的实现
Nov 25 PHP
PHP操作Redis常用命令的实例详解
Dec 23 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+java实现自动新闻滚动窗口
2006/10/09 PHP
php在字符串中查找另一个字符串
2008/11/19 PHP
php微信分享到朋友圈、QQ、朋友、微博
2019/02/18 PHP
laravel 中某一字段自增、自减的例子
2019/10/11 PHP
基于laravel belongsTo使用详解
2019/10/18 PHP
CSS3画一个阴阳八卦图
2021/03/09 HTML / CSS
Ext JS Grid在IE6 下宽度的问题解决方法
2009/02/15 Javascript
IE与Firefox在JavaScript上的7个不同句法分享
2011/10/30 Javascript
jquery post方式传递多个参数值后台以数组的方式进行接收
2013/01/11 Javascript
js获取select默认选中的Option并不是当前选中值
2014/05/07 Javascript
超详细的javascript数组方法汇总
2015/11/21 Javascript
angularjs创建弹出框实现拖动效果
2020/08/25 Javascript
通过BootStrap-select插件 js jQuery控制select属性变化
2017/01/03 Javascript
js实现数字递增特效【仿支付宝我的财富】
2017/05/05 Javascript
微信小程序使用modal组件弹出对话框功能示例
2017/11/29 Javascript
微信小程序实现分享朋友圈的图片功能示例
2019/01/18 Javascript
vue实现树形结构样式和功能的实例代码
2019/10/15 Javascript
JavaScrip如果基于url实现图片下载
2020/07/03 Javascript
python抓取最新博客内容并生成Rss
2015/05/17 Python
Python两台电脑实现TCP通信的方法示例
2019/05/06 Python
python多线程http压力测试脚本
2019/06/25 Python
如何通过python实现人脸识别验证
2020/01/17 Python
Python with标签使用方法解析
2020/01/17 Python
jupyter notebook 重装教程
2020/04/16 Python
python 简单的调用有道翻译
2020/11/25 Python
HTML5拖放功能_动力节点Java学院整理
2017/07/13 HTML / CSS
美国最大的电子宠物训练产品制造商:PetSafe
2018/10/12 全球购物
美国最大最全的亚洲购物网站:美国亚米网(Yamibuy)
2020/05/05 全球购物
毕业生自我鉴定实例
2014/01/21 职场文书
扩大国家免疫规划实施方案
2014/03/21 职场文书
绿色家庭事迹材料
2014/05/01 职场文书
捐书活动总结
2014/05/04 职场文书
银行青年文明号事迹材料
2014/05/31 职场文书
推销搭讪开场白
2015/05/28 职场文书
2016党员干部廉洁自律心得体会
2016/01/13 职场文书
导游词之峨眉乐山/兵马俑/北京故宫御花园
2019/09/03 职场文书