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对MongoDB[NoSQL]数据库的操作
Mar 01 PHP
PHP 安全检测代码片段(分享)
Jul 05 PHP
php创建sprite
Feb 11 PHP
主流PHP框架的优缺点对比分析
Dec 25 PHP
推荐5款跨平台的PHP编辑器
Dec 25 PHP
PHP输出日历表代码实例
Mar 27 PHP
php简单操作mysql数据库的类
Apr 16 PHP
php商品对比功能代码分享
Sep 24 PHP
ThinkPHP中Common/common.php文件常用函数功能分析
May 20 PHP
Yii2使用表单上传文件的实例代码
Aug 03 PHP
PHP将整数数字转换为罗马数字实例分享
Mar 17 PHP
PHP Redis扩展无法加载的问题解决方法
Aug 22 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实现 上一篇、下一篇的代码
2012/09/29 PHP
PHP json_decode函数详细解析
2014/02/17 PHP
php实现的操作excel类详解
2016/01/15 PHP
PHP数组去重比较快的实现方式
2016/01/19 PHP
必须收藏的php实用代码片段
2016/02/02 PHP
Javascript客户端脚本的设计和应用
2006/08/21 Javascript
jQuery操作Select选择的Text和Value(获取/设置/添加/删除)
2013/03/06 Javascript
关于jQuery判断元素是否存在的问题示例探讨
2014/07/21 Javascript
Angularjs实现mvvm式的选项卡示例代码
2016/09/08 Javascript
基于JavaScript实现跳转提示页面
2016/09/24 Javascript
DOM事件探秘篇
2017/02/15 Javascript
jquery表单提交带错误信息提示效果
2017/03/09 Javascript
详解vue-meta如何让你更优雅的管理头部标签
2018/01/18 Javascript
最适应的vue.js的form提交涉及多种插件【推荐】
2018/08/27 Javascript
解决vue keep-alive 数据更新的问题
2018/09/21 Javascript
微信小程序 授权登录详解(附完整源码)
2019/08/23 Javascript
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
2020/12/25 Vue.js
el-table表头根据内容自适应完美解决表头错位和固定列错位
2021/01/07 Javascript
对Python 文件夹遍历和文件查找的实例讲解
2018/04/26 Python
TensorFlow2.X使用图片制作简单的数据集训练模型
2020/04/08 Python
解决pyqt5异常退出无提示信息的问题
2020/04/08 Python
Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)
2020/06/23 Python
学python最电脑配置有要求么
2020/07/05 Python
通过代码实例解析Pytest运行流程
2020/08/20 Python
天游软件面试
2013/11/23 面试题
焊接专业毕业生求职信
2013/10/01 职场文书
班班通项目实施方案
2014/02/25 职场文书
学生操行评语大全
2014/04/24 职场文书
历史学专业求职信
2014/06/19 职场文书
副校长个人对照检查材料思想汇报
2014/10/04 职场文书
委托书英文
2015/01/28 职场文书
市场总监岗位职责
2015/02/11 职场文书
2015年收银员个人工作总结
2015/04/01 职场文书
庆祝教师节新闻稿
2015/07/17 职场文书
药品销售员2015年终工作总结
2015/10/22 职场文书
pandas中对文本类型数据的处理小结
2021/11/01 Python