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远程连接MYSQL数据库非常慢的解决方法
Jul 05 PHP
php邮件发送,php发送邮件的类
Mar 24 PHP
PHP header()函数使用详细(301、404等错误设置)
Apr 17 PHP
php快递单号查询接口使用示例
May 05 PHP
PHP获取数组的键与值方法小结
Jun 13 PHP
功能强大的php分页函数
Jul 20 PHP
Yii2汉字转拼音类的实例代码
Apr 18 PHP
PHP文字转图片功能原理与实现方法分析
Aug 31 PHP
thinkphp5.0自定义验证规则使用方法
Nov 16 PHP
PHP注释语法规范与命名规范详解篇
Jan 21 PHP
JS操作XML中DTD介绍及使用方法分析
Jul 04 PHP
laravel validate 设置为中文的例子(验证提示为中文)
Sep 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 file_put_contents()功能函数(集成了fopen、fwrite、fclose)
2011/05/24 PHP
php curl常见错误:SSL错误、bool(false)
2011/12/28 PHP
Yii2中OAuth扩展及QQ互联登录实现方法
2016/05/16 PHP
PHP 7.1新特性的汇总介绍
2016/12/16 PHP
PHP简单留言本功能实现代码
2017/06/09 PHP
PHPExcel 修改已存在Excel的方法
2018/05/03 PHP
php微信分享到朋友圈、QQ、朋友、微博
2019/02/18 PHP
js实现页面打印功能实例代码(附去页眉页脚功能代码)
2009/12/15 Javascript
jQuery+ajax实现顶一下,踩一下效果
2010/07/17 Javascript
Jquery实现自定义tooltip示例代码
2014/02/12 Javascript
Javascript前端UI框架Kit使用指南之kitjs的对话框组件
2014/11/28 Javascript
node.js中的http.get方法使用说明
2014/12/14 Javascript
微信小程序 封装http请求实例详解
2017/01/16 Javascript
详解jquery插件jquery.viewport.js学习使用方法
2017/09/08 jQuery
JS闭包的几种常见形式实例详解
2017/09/16 Javascript
在Debian(Raspberry Pi)树莓派上安装NodeJS的教程详解
2017/09/19 NodeJs
vue-router+vuex addRoutes实现路由动态加载及菜单动态加载
2017/09/28 Javascript
jQuery Validate插件ajax方式验证输入值的实例
2017/12/21 jQuery
jquery 实现拖动文件上传加载进度条功能
2018/03/18 jQuery
通过jquery获取上传文件名称、类型和大小的实现代码
2018/04/19 jQuery
vue裁切预览组件功能的实现步骤
2018/05/04 Javascript
小程序获取周围IBeacon设备的方法
2018/10/31 Javascript
Python编程给numpy矩阵添加一列方法示例
2017/12/04 Python
selenium+python自动化测试之使用webdriver操作浏览器的方法
2019/01/23 Python
python3+PyQt5 使用三种不同的简便项窗口部件显示数据的方法
2019/06/17 Python
python 统计文件中的字符串数目示例
2019/12/24 Python
基于Tensorflow使用CPU而不用GPU问题的解决
2020/02/07 Python
浅谈Python中的继承
2020/06/19 Python
利用CSS3实现自定义滚动条代码分享
2016/08/18 HTML / CSS
飞利浦美国官网:Philips美国
2020/02/28 全球购物
Prototype如何实现页面局部定时刷新
2013/08/06 面试题
管理提升方案
2014/06/04 职场文书
《山中访友》教学反思
2016/02/24 职场文书
小学生节约用水倡议书
2019/08/12 职场文书
JavaScript流程控制(循环)
2021/12/06 Javascript
Python IO文件管理的具体使用
2022/03/20 Python