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页面间传递参数实例代码
Jun 05 PHP
PHP写杨辉三角实例代码
Jul 17 PHP
那些年一起学习的PHP(三)
Mar 22 PHP
测试PHP连接MYSQL成功与否的代码
Aug 16 PHP
CodeIgniter框架提示Disallowed Key Characters的解决办法
Apr 21 PHP
php时间戳格式化显示友好的时间函数分享
Oct 21 PHP
php通过ksort()函数给关联数组按照键排序的方法
Mar 18 PHP
iOS+PHP注册登录系统 PHP部分(上)
Dec 26 PHP
Laravel访问出错提示:`Warning: require(/vendor/autoload.php): failed to open stream: No such file or di解决方法
Apr 02 PHP
yii2.0框架数据库操作简单示例【添加,修改,删除,查询,打印等】
Apr 13 PHP
PHP实现获取文件mime类型多种方法解析
May 28 PHP
Thinkphp5+Redis实现商品秒杀代码实例讲解
Dec 29 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实现根据数组的值进行分组的方法
2017/04/20 PHP
jQuery.Validate 使用笔记(jQuery Validation范例 )
2010/06/25 Javascript
js 可拖动列表实现代码
2011/12/13 Javascript
js通过更改按钮的显示样式实现按钮的滑动效果
2014/04/23 Javascript
jquery如何把数组变为字符串传到服务端并处理
2014/04/30 Javascript
js跨域访问示例(客户端/服务端)
2014/05/19 Javascript
jquery实现倒计时功能
2015/12/28 Javascript
JavaScript仿淘宝页面图片滚动加载及刷新回顶部的方法解析
2016/05/24 Javascript
浅谈angularjs module返回对象的坑(推荐)
2016/10/21 Javascript
Angular-Touch库用法示例
2016/12/22 Javascript
nodejs 生成和导出 word的实例代码
2018/07/31 NodeJs
bootstrap datepicker的基本使用教程
2019/07/09 Javascript
vue-cli创建的项目中的gitHooks原理解析
2020/02/14 Javascript
vue跳转页面的几种方法(推荐)
2020/03/26 Javascript
深入分析JavaScript 事件循环(Event Loop)
2020/06/19 Javascript
JS判断数组四种实现方法详解
2020/06/29 Javascript
[01:33:30]DOTA2-DPC中国联赛 正赛 RNG vs Phoenix BO3 第二场 2月5日
2021/03/11 DOTA
Python脚本在Appium库上对移动应用实现自动化测试
2015/04/17 Python
Python-嵌套列表list的全面解析
2016/06/08 Python
Python中使用装饰器来优化尾递归的示例
2016/06/18 Python
python如何获取服务器硬件信息
2017/05/11 Python
python读取文件名并改名字的实例
2019/01/07 Python
python批量解压zip文件的方法
2019/08/20 Python
python 使用pdfminer3k 读取PDF文档的例子
2019/08/27 Python
pandas-resample按时间聚合实例
2019/12/27 Python
python对XML文件的操作实现代码
2020/03/27 Python
canvas画图被放大且模糊的解决方法
2020/08/11 HTML / CSS
日本亚马逊官方网站:Amazon.co.jp
2020/04/14 全球购物
东方红海科技面试题软件测试方面
2012/02/08 面试题
大学生第一学年自我鉴定2015
2014/09/28 职场文书
2014年教师学期工作总结
2014/11/08 职场文书
服务员岗位职责
2015/02/03 职场文书
公司财务经理岗位职责
2015/04/08 职场文书
Pytorch中的学习率衰减及其用法详解
2021/06/05 Python
德劲DE1102数字调谐收音机机评
2022/04/07 无线电
Python实现数据的序列化操作详解
2022/07/07 Python