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生成带有雪花背景的验证码
Oct 09 PHP
Mysql的常用命令
Oct 09 PHP
php whois查询API制作方法
Jun 23 PHP
PHP中register_globals参数为OFF和ON的区别(register_globals 使用详解)
Feb 05 PHP
php使用curl发送json格式数据实例
Dec 17 PHP
php实现的树形结构数据存取类实例
Nov 29 PHP
php创建session的方法实例详解
Jan 27 PHP
php bootstrap实现简单登录
Mar 08 PHP
thinkPHP实现的联动菜单功能详解
May 05 PHP
Laravel框架路由管理简单示例
May 07 PHP
Laravel自动生成UUID,从建表到使用详解
Oct 24 PHP
用php实现分页效果的示例代码
Dec 10 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/04/25 PHP
php 中的4种标记风格介绍
2012/05/10 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
2017/08/28 PHP
PHP实现微信退款功能
2018/10/02 PHP
javascript Array.sort() 跨浏览器下需要考虑的问题
2009/12/07 Javascript
js切换光标示例代码
2013/10/10 Javascript
用javascript关闭本窗口技巧小结
2014/09/05 Javascript
原生js制作日历控件实例分享
2016/04/06 Javascript
jQuery购物网页经典制作案例
2016/08/19 Javascript
jQuery实现手机版页面翻页效果的简单实例
2016/10/05 Javascript
原生JS查找元素的方法(推荐)
2016/11/22 Javascript
关于js中的鼠标事件总结
2017/07/11 Javascript
详解vue中引入stylus及报错解决方法
2017/09/22 Javascript
js+html获取系统当前时间
2017/11/10 Javascript
微信小程序开发之改变data中数组或对象的某一属性值
2018/07/05 Javascript
jquery ui 实现 tab标签功能示例【测试可用】
2019/07/25 jQuery
javascript中的with语句学习笔记及用法
2020/02/17 Javascript
JQuery基于FormData异步提交数据文件
2020/09/01 jQuery
Python中的各种装饰器详解
2015/04/11 Python
Python编程实战之Oracle数据库操作示例
2017/06/21 Python
Flask web开发处理POST请求实现(登录案例)
2018/07/26 Python
对Python 窗体(tkinter)文本编辑器(Text)详解
2018/10/11 Python
利用pyshp包给shapefile文件添加字段的实例
2019/12/06 Python
python 制作python包,封装成可用模块教程
2020/07/13 Python
如何使用python-opencv批量生成带噪点噪线的数字验证码
2020/12/21 Python
意大利奢侈品多品牌集合店:TheDoubleF
2019/08/24 全球购物
马德里运动鞋商店:Nigra Mercato
2020/02/16 全球购物
Fanatics官网:运动服装、球衣、运动装备
2020/10/12 全球购物
机械制造与自动化应届生求职信
2013/11/16 职场文书
中国好声音华少广告词
2014/03/17 职场文书
《泉水》教学反思
2014/04/11 职场文书
住宅质量保证书
2014/04/29 职场文书
医院合作协议书
2014/08/19 职场文书
社区活动总结
2015/02/04 职场文书
晶体管来复再生式二管收音机
2021/04/22 无线电
Python帮你解决手机qq微信内存占用太多问题
2022/02/15 Python