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之第一天
Oct 09 PHP
坏狼的PHP学习教程之第2天
Jun 15 PHP
ThinkPHP多语言支持与多模板支持概述
Aug 22 PHP
php使用Cookie控制访问授权的方法
Jan 21 PHP
10个值得深思的PHP面试题
Nov 14 PHP
php smtp实现发送邮件功能
Jun 22 PHP
PHP htmlspecialchars()函数用法与实例讲解
Mar 08 PHP
详解PHP PDO简单教程
May 28 PHP
PHP Primary script unknown 解决方法总结
Aug 22 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
Nov 25 PHP
PHP数据源架构模式之表入口模式实例分析
Jan 23 PHP
Nginx+php配置文件及原理解析
Dec 09 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使用get_headers函数判断远程文件是否存在的方法
2014/11/28 PHP
PHP编写简单的App接口
2016/08/28 PHP
让Laravel API永远返回JSON格式响应的方法示例
2018/09/05 PHP
php设计模式之策略模式应用案例详解
2019/06/17 PHP
php的instanceof和判断闭包Closure操作示例
2020/01/26 PHP
javascript while语句和do while语句的区别分析
2007/12/08 Javascript
jQuery 位置插件
2008/12/25 Javascript
IE 当eval遇上function的处理
2011/08/09 Javascript
Javascript WebSocket使用实例介绍(简明入门教程)
2014/04/16 Javascript
jQuery的:parent选择器定义和用法
2014/07/01 Javascript
Node.js 应用跑得更快 10 个技巧
2016/04/03 Javascript
关于Jquery中的事件绑定总结
2016/10/26 Javascript
关于jQuery.ajax()的jsonp碰上post详解
2017/07/02 jQuery
js实现同一个页面,多个enter事件绑定的示例
2018/10/10 Javascript
解决Vue大括号字符换行踩的坑
2020/11/09 Javascript
分享Python字符串关键点
2015/12/13 Python
Python实现将json文件中向量写入Excel的方法
2018/03/26 Python
python 读取.csv文件数据到数组(矩阵)的实例讲解
2018/06/14 Python
Linux下安装python3.6和第三方库的教程详解
2018/11/09 Python
python 实现将txt文件多行合并为一行并将中间的空格去掉方法
2018/12/20 Python
python TF-IDF算法实现文本关键词提取
2019/05/29 Python
pygame实现烟雨蒙蒙下彩虹雨
2019/11/11 Python
美国最大的香水出口:FragranceX.com
2017/11/04 全球购物
慕尼黑山地运动、户外服装和体育用品专家:Sporthaus Schuster
2019/08/27 全球购物
RUIFIER官网:英国奢侈高级珠宝品牌
2020/06/12 全球购物
初中生物教学反思
2014/01/10 职场文书
学校课外活动总结
2014/05/08 职场文书
组织鉴定材料
2014/06/02 职场文书
班级口号大全
2014/06/09 职场文书
动物科学专业求职信
2014/07/27 职场文书
2014年远程教育工作总结
2014/12/09 职场文书
2015年医院药剂科工作总结
2015/05/04 职场文书
荒岛余生观后感
2015/06/09 职场文书
2016年入党心得体会范文
2016/01/23 职场文书
HTML中的表单Form实现居中效果
2021/05/25 HTML / CSS
 python中的元类metaclass详情
2022/05/30 Python