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 相关文章推荐
为php4加入动态flash文件的生成的支持
Oct 09 PHP
Linux下进行MYSQL编程时插入中文乱码的解决方案
Mar 15 PHP
php下HTTP Response中的Chunked编码实现方法
Nov 19 PHP
php使用cookie保存登录用户名的方法
Jan 26 PHP
教大家制作简单的php日历
Nov 17 PHP
WordPres对前端页面调试时的两个PHP函数使用小技巧
Dec 22 PHP
Symfony模板的快捷变量用法实例
Mar 17 PHP
再谈PHP中单双引号的区别详解
Jun 12 PHP
[原创]php使用curl判断网页404(不存在)的方法
Jun 23 PHP
laravel学习教程之关联模型
Jul 30 PHP
PHP生成随机字符串实例代码(字母+数字)
Sep 11 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
Apr 05 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
解析CodeIgniter自定义配置文件
2013/06/18 PHP
Symfony2使用Doctrine进行数据库查询方法实例总结
2016/03/18 PHP
Zend Framework框架教程之Zend_Db_Table_Rowset用法实例分析
2016/03/21 PHP
php自动提交表单的方法(基于fsockopen与curl)
2016/05/09 PHP
PHP实现微信退款功能
2018/10/02 PHP
JavaScript中的Location地址对象
2008/01/16 Javascript
CSS JavaScript 实现菜单功能 改进版
2008/12/09 Javascript
DOM和XMLHttpRequest对象的属性和方法整理
2012/01/04 Javascript
JSON辅助格式化处理方法
2013/03/26 Javascript
简略说明Javascript中的= =(等于)与= = =(全等于)区别
2013/04/16 Javascript
javascript如何创建表格(javascript绘制表格的二种方法)
2013/12/10 Javascript
Javascript基于AJAX回调函数传递参数实例分析
2015/12/15 Javascript
微信小程序 POST请求(网络请求)详解及实例代码
2016/11/16 Javascript
深入解析js轮播插件核心代码的实现过程
2017/04/14 Javascript
jQuery插件FusionCharts绘制的2D双柱状图效果示例【附demo源码】
2017/05/13 jQuery
JS实现页面内跳转的简单代码
2017/09/03 Javascript
详解基于 axios 的 Vue 项目 http 请求优化
2017/09/04 Javascript
微信小程序实现两个页面传值的方法分析
2018/12/11 Javascript
layui实现tab的添加拒绝重复的方法
2019/09/04 Javascript
js表达式与运算符简单操作示例
2020/02/15 Javascript
解决VUE自定义拖拽指令时 onmouseup 与 click事件冲突问题
2020/07/24 Javascript
vue $router和$route的区别详解
2020/12/02 Vue.js
[51:05]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第一局
2016/03/06 DOTA
python k-近邻算法实例分享
2014/06/11 Python
python访问mysql数据库的实现方法(2则示例)
2016/01/06 Python
Python字典推导式将cookie字符串转化为字典解析
2019/08/10 Python
为什么是 Python -m
2020/06/19 Python
KIKO MILANO英国官网:意大利知名化妆品和护肤品品牌
2017/09/25 全球购物
澳大利亚最大的网上油画销售画廊:Direct Art Australia
2018/04/15 全球购物
物业保安员岗位职责制度
2014/01/30 职场文书
自行车广告词大全
2014/03/21 职场文书
合作协议书怎么写
2014/04/18 职场文书
奖学金主要事迹范文
2015/11/04 职场文书
2019年个人工作总结范文
2019/03/25 职场文书
vue中data改变后让视图同步更新的方法
2021/03/29 Vue.js
无线电通信名词解释
2022/02/18 无线电