PHP面向对象编程快速入门


Posted in PHP onOctober 09, 2006

   面向对象编程(OOP)是我们编程的一项基本技能,PHP4对OOP提供了良好的支持。如何使用OOP的思想来进行PHP的高级编程,对于提高PHP编程能力和规划好Web开发构架都是非常有意义的。下面我们就通过实例来说明使用PHP的OOP进行编程的实际意义和应用方法。 

我们通常在做一个有数据库后台的网站的时候,都会考虑到程序需要适用于不同的应用环境。和其他编程语言有所不同的是,在PHP中,操作数据库的是一系列的具体功能函数(如果你不使用ODBC接口的话)。这样做虽然效率很高,但是封装却不够。如果有一个统一的数据库接口,那么我们就可以不对程序做任何修改而适用于多种数据库,从而使程序的移植性和跨平台能力都大大提高。 

在PHP中要完成OOP,需要进行对象封装,也就是编写类。我们可以通过生成一个新的SQL类实现对数据库的简单封装。例如: 

< ? 
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=$pas 
swd; 
$this->Driver->database=$d 
atabase; 
$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下,就可以正常地使用了。注意编写数据库驱动文件时,文件名应和类名保持一致。

< ? 
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 connect to $this->host"); 
MySQL_select_db($this->database,$conn) or 
die("Could not switch 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 query 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的思想来实现对数据库的编程了。

< ? 
Include(“SQL.php”); 
$sql = new SQL; //生成新的Sql对象 
if($sql-> DriverRegister(“MySQL”)) //注册数据库驱动 

$sql->Connect(“localhost”,”root”,””,”test”); 
$res=$sql->query(“select * 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 相关文章推荐
Windows下PHP5和Apache的安装与配置
Sep 05 PHP
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
Apr 18 PHP
关于Iframe如何跨域访问Cookie和Session的解决方法
Apr 15 PHP
php检测网页是否被百度收录的函数代码
Oct 09 PHP
字符串长度函数strlen和mb_strlen的区别示例介绍
Sep 09 PHP
php表单文件iframe异步上传实例讲解
Jul 26 PHP
PHP 实现手机端APP支付宝支付功能
Jun 07 PHP
PHP远程连接oracle数据库操作实现方法图文详解
Apr 11 PHP
php版本CKEditor 4和CKFinder安装及配置方法图文教程
Jun 05 PHP
Thinkphp自定义生成缩略图尺寸的方法
Aug 05 PHP
PHP生成图表pChart的示例解析
Jul 31 PHP
PHP配置文件php.ini中打开错误报告的设置方法
Jan 09 PHP
PHP模拟SQL Server的两个日期处理函数
Oct 09 #PHP
PHP实现的功能是显示8条基色色带
Oct 09 #PHP
提升PHP执行速度全攻略(上)
Oct 09 #PHP
提升PHP执行速度全攻略(下)
Oct 09 #PHP
如何过滤高亮显示非法字符
Oct 09 #PHP
无限级别菜单的实现
Oct 09 #PHP
综合图片计数器
Oct 09 #PHP
You might like
overlord人气高涨,却被菲利普频繁举报,第四季很难在国内上映
2020/05/06 日漫
让你的网站首页自动选择语言转跳
2006/12/06 PHP
php生成xml简单实例代码
2009/12/16 PHP
浅谈mysql_query()函数的返回值问题
2016/09/05 PHP
php使用crypt()函数进行加密
2017/06/08 PHP
laravel通过创建自定义artisan make命令来新建类文件详解
2017/08/17 PHP
PHP过滤器 filter_has_var() 函数用法实例分析
2020/04/23 PHP
对JavaScript的eval()中使用函数的进一步讨论
2008/07/26 Javascript
JavaScript 闭包在封装函数时的简单分析
2009/11/28 Javascript
仿新浪微博登陆邮箱提示效果的js代码
2013/08/02 Javascript
js简单实现交换Li的值
2014/05/22 Javascript
简介JavaScript中POSITIVE_INFINITY值的使用
2015/06/05 Javascript
JS实现随页面滚动显示/隐藏窗口固定位置元素
2016/02/26 Javascript
javaScript事件机制兼容【详细整理】
2016/07/23 Javascript
jQuery插件扩展操作入门示例
2017/01/16 Javascript
原生js实现回复评论功能
2017/01/18 Javascript
easyui-datagrid特殊字符不能显示的处理方法
2017/04/12 Javascript
AngularJS动态菜单操作指令
2017/04/25 Javascript
基于Taro的微信小程序模板消息-获取formId功能模块封装实践
2019/07/15 Javascript
js基础之事件捕获与冒泡原理
2019/10/09 Javascript
[46:14]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第一场 12.11
2020/12/16 DOTA
Python利用多进程将大量数据放入有限内存的教程
2015/04/01 Python
python使用自定义user-agent抓取网页的方法
2015/04/15 Python
对python 判断数字是否小于0的方法详解
2019/01/26 Python
python脚本开机自启的实现方法
2019/06/28 Python
python买卖股票的最佳时机(基于贪心/蛮力算法)
2019/07/05 Python
Python把图片转化为pdf代码实例
2020/07/28 Python
python openpyxl模块的使用详解
2021/02/25 Python
css 如何让背景图片拉伸填充避免重复显示
2013/07/11 HTML / CSS
浅析HTML5 meta viewport参数
2020/10/28 HTML / CSS
美国羽绒床上用品第一品牌:Pacific Coast
2018/08/25 全球购物
Auguste The Label官网:澳大利亚一家精品女装时尚品牌
2020/06/14 全球购物
2015最新民情日记范文
2015/06/26 职场文书
退休教师欢送会致辞
2015/07/31 职场文书
JavaScript实现简单图片切换
2021/04/29 Javascript
Spring中bean的生命周期之getSingleton方法
2021/06/30 Java/Android