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 相关文章推荐
消息持续发送的完整例子
Oct 09 PHP
Ajax PHP简单入门教程代码
Apr 25 PHP
浅析关于PHP位运算的简单权限设计
Jun 30 PHP
PHP根据IP地址获取所在城市具体实现
Nov 27 PHP
destoon实现公司新闻详细页添加评论功能的方法
Jul 15 PHP
php文件读取方法实例分析
Jun 20 PHP
php实现压缩合并js的方法【附demo源码下载】
Sep 22 PHP
php实现当前页面点击下载文件的实例代码
Nov 16 PHP
PHP清除缓存的几种方法总结
Sep 12 PHP
浅谈PHP实现大流量下抢购方案
Dec 15 PHP
ThinkPHP5.0框架结合Swoole开发实现WebSocket在线聊天案例详解
Apr 02 PHP
Laravel 修改默认日志文件名称和位置的例子
Oct 17 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
php中的注释、变量、数组、常量、函数应用介绍
2012/11/16 PHP
php中实现记住密码下次自动登录的例子
2014/11/06 PHP
PHP7 弃用功能
2021/03/09 PHP
escape、encodeURI 和 encodeURIComponent 的区别
2009/03/02 Javascript
jQuery为iframe的body添加click事件的实现代码
2011/04/07 Javascript
JavaScript页面实时显示当前时间实例代码
2016/10/23 Javascript
解析微信JS-SDK配置授权,实现分享接口
2016/12/09 Javascript
jquery DataTable实现前后台动态分页
2017/06/17 jQuery
JavaScript利用fetch实现异步请求的方法实例
2017/07/26 Javascript
javaScript日期工具类DateUtils详解
2017/12/08 Javascript
node前端开发模板引擎Jade的入门
2018/05/11 Javascript
解决nodejs的npm命令无反应的问题
2018/05/17 NodeJs
vue+elementui 对话框取消 表单验证重置示例
2019/10/29 Javascript
Vue-resource安装过程及使用方法解析
2020/07/21 Javascript
vue实现一个获取按键展示快捷键效果的Input组件
2021/01/13 Vue.js
python自动化测试之从命令行运行测试用例with verbosity
2014/09/28 Python
Python CSV模块使用实例
2015/04/09 Python
python进行两个表格对比的方法
2018/06/27 Python
matplotlib.pyplot绘图显示控制方法
2019/01/15 Python
Django 模型类(models.py)的定义详解
2019/07/19 Python
Django框架组成结构、基本概念与文件功能分析
2019/07/30 Python
pyenv与virtualenv安装实现python多版本多项目管理
2019/08/17 Python
python实现字典嵌套列表取值
2019/12/16 Python
新手入门学习python Numpy基础操作
2020/03/02 Python
解决Python在导入文件时的FileNotFoundError问题
2020/04/10 Python
HealthElement海外旗舰店:新西兰大卖场
2018/02/23 全球购物
生物技术毕业生自荐信
2013/10/23 职场文书
致裁判员加油稿
2014/02/08 职场文书
酒店总经理职务说明书
2014/02/26 职场文书
交警作风整顿剖析材料
2014/10/11 职场文书
2015年保管员工作总结
2015/04/30 职场文书
给老婆的检讨书(搞笑版)
2015/05/06 职场文书
初中政治教师教学反思
2016/02/23 职场文书
四年级作文之说明文作文
2019/10/14 职场文书
解决sql server 数据库,sa用户被锁定的问题
2021/06/11 SQL Server
青岛市的收音机研制与生产
2022/04/07 无线电