PHP面向对象编程快速入门


Posted in PHP onDecember 14, 2006

【摘 要】面向对象编程(OOP)是我们编程的一项基本技能,PHP4对OOP提供了良 好的支持。如何使用OOP的思想来进行PHP的高级编程,对于提高PHP编程能力和 规划好Web开发构架都是非常有意义的。

面向对象编程(OOP)是我们编程的一项基本技能,PHP4对 OOP提供了良好的支持。如何使用OOP的思想来进行PHP的高级编程,对于提高PHP 编程 能力和规划好Web开发构架都是非常有意义的。下面我们就通过实例来说明 使用PHP的OOP进行编程的实际意义和应用方法。

我们通常在做一个有数据库后台的网站的时候,都会考虑到程序需 要适用于不同的应用环境。和其他编程语言有所不同的是,在PHP中,操作数据 库的是一系 列的具体功能函数(如果你不使用ODBC接口的话)。这样做虽然效 率很高,但是封装却不够。如果有一个统一的数据库接口,那么我们就可以不对 程序做任何修 改而适用于多种数据库,从而使程序的移植性和跨平台能力都大 大提高。

在PHP中要完成OOP,需要进行 对象封装,也就是编写类。我们可以通过生成一个新的SQL类实现对数据库的简 单封装。例如: 
 PHP:  

<?  
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=$passwd;  
$this->Driver->database=$database;  
$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下,就可以正常地使用了。注意编写数据库驱动文件时 ,文件名应和类名保持一致。
PHP:  

<?  
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 con nect to $ this->host");  
MySQL_select_db($this->database,$conn) or  
die("Could not swi tch 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 que ry 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的思想来实现对数据库的编程了。

PHP:  

<?  
Include(“SQL.php”);  
$sql = new < font color="#0000bb">SQL; //生成新的Sql对象  
if($sql-> DriverRegister(“MySQL”& lt;font color="#007700">)) //注册数据库驱动  
{  
$sql->Connect(“localhost”,”root”&l t;font color="#007700">,””,”test”&l t;font color="#007700">);  
$res=$sql->query(“select & lt;font color="#007700">* 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函数,php爱好者站推荐
Mar 19 PHP
php 中文和编码判断代码
May 16 PHP
php while循环得到循环次数
Oct 26 PHP
thinkphp模板用法和内容输出实例
Nov 28 PHP
yii的CURD操作实例详解
Dec 04 PHP
在php和MySql中计算时间差的方法详解
Mar 27 PHP
PHP使用strtotime获取上个月、下个月、本月的日期
Dec 30 PHP
php实现压缩合并js的方法【附demo源码下载】
Sep 22 PHP
PHP中功能强大却很少使用的函数实例小结
Nov 10 PHP
PHPExcel导出2003和2007的excel文档功能示例
Jan 04 PHP
YII分模块加载路由的实现方法
Oct 01 PHP
laravel 之 Eloquent 模型修改器和序列化示例
Oct 17 PHP
Breeze 文章管理系统 v1.0.0正式发布
Dec 14 #PHP
谈谈新手如何学习PHP
Dec 14 #PHP
php基础知识:类与对象(5) static
Dec 13 #PHP
php基础知识:类与对象(4) 范围解析操作符(::)
Dec 13 #PHP
php基础知识:类与对象(3) 构造函数和析构函数
Dec 13 #PHP
php基础知识:类与对象(2) 自动加载对象
Dec 13 #PHP
php基础知识:类与对象(1)
Dec 13 #PHP
You might like
劣质的PHP代码简化
2010/02/08 PHP
php获取后台Job管理的实现代码
2011/06/10 PHP
PHP Cookie的使用教程详解
2013/06/03 PHP
ci检测是ajax还是页面post提交数据的方法
2014/11/10 PHP
php中current、next与reset函数用法实例
2014/11/17 PHP
PHP对文件夹递归执行chmod命令的方法
2015/06/19 PHP
PHP用FTP类上传文件视频等的简单实现方法
2016/09/23 PHP
javascript同步Import,同步调用外部js的方法
2008/07/08 Javascript
jquery实现一个简单好用的弹出框
2014/09/26 Javascript
jquery 插件实现多行文本框[textarea]自动高度
2015/03/04 Javascript
再JavaScript的jQuery库中编写动画效果的指南
2015/08/13 Javascript
使用plupload自定义参数实现多文件上传
2016/07/19 Javascript
JavaScript字符串检索字符的方法
2017/06/23 Javascript
JavaScript设计模式之策略模式实现原理详解
2020/05/29 Javascript
[03:49]辉夜杯现场龙骑士COSER秀情商“我喜欢芬队!”
2015/12/27 DOTA
python list语法学习(带例子)
2013/11/01 Python
Python Deque 模块使用详解
2014/07/04 Python
python中使用print输出中文的方法
2018/07/16 Python
Python补齐字符串长度的实例
2018/11/15 Python
python实现Flappy Bird源码
2018/12/24 Python
python实现自动解数独小程序
2019/01/21 Python
python求最大值最小值方法总结
2019/06/25 Python
利用python实现汉字转拼音的2种方法
2019/08/12 Python
Python 面向对象部分知识点小结
2020/03/09 Python
Anaconda的安装与虚拟环境建立
2020/11/18 Python
澳大利亚在线时尚精品店:Hello Molly
2018/02/26 全球购物
为您的家、后院、车库等在线购物:Spreetail
2019/06/17 全球购物
介绍一下结构化程序设计方法和面向对象程序设计方法的区别
2012/06/27 面试题
责任书格式范文
2014/07/28 职场文书
党员四风自我剖析材料
2014/10/07 职场文书
关于运动会的广播稿
2015/08/19 职场文书
该怎么书写道歉信?
2019/07/03 职场文书
修辞手法有哪些?
2019/08/29 职场文书
用 Python 元类的特性实现 ORM 框架
2021/05/19 Python
MySQL里面的子查询的基本使用
2021/08/02 MySQL
vue+iview实现手机号分段输入框
2022/03/25 Vue.js