面向对象编程(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面向对象编程快速入门的更多相关文章

  1. JQuery--JQuery面向对象编程快速入门-插件开发

    JQuery源码片段分析 (function(window){ /** * jQuery是一个函数 是一个对象 是一个构造器函数 */ var jQuery = function( selector, ...

  2. .Net Core WebAPI 基于Task的同步&异步编程快速入门

    .Net Core WebAPI 基于Task的同步&异步编程快速入门 Task.Result async & await 总结 并行任务(Task)以及基于Task的异步编程(asy ...

  3. COM编程快速入门

    COM编程快速入门 COM编程快速入门 http://www.vckbase.com/index.php/wv/1642   COM是一种跨应用和语言共享二进制代码的方法.与C++不同,它提倡源代码重 ...

  4. Haskell 函数式编程快速入门【草】

    什么是函数式编程 用常规编程语言中的函数指针.委托和Lambda表达式等概念来帮助理解(其实函数式编程就是Lambda演算延伸而来的编程范式). 函数式编程中函数可以被非常容易的定义和传递. Hask ...

  5. 【PHP】PHP面向对象编程--phpOOP入门

     PHP从入门到精通 之PHP的面相对象编程 面向对象编程(Object Oriented Programming, OOP, 面向对象程序设计)是一种计算机编程架构,OOP的一条基本原则是计算机程序 ...

  6. python笔记 面向对象编程从入门到高级

    目录: 一.概念 二.方法    2.1组合 2.2继承 2.3多态 2.4封装 2.5归一化设计 三.面向对象高级   3.1   反射(自省) 3.2   内置方法__getatter__, __ ...

  7. Scala编程快速入门系列(一)

    目    录 一.Scala概述 二.Scala数据类型 三.Scala函数 四.Scala集合 五.Scala伴生对象 六.Scala trait 七.Actor 八.隐式转换与隐式参数 九.Sca ...

  8. Java核心编程快速入门

    Java核心编程部分的基础学习内容就不一一介绍了,本文的重点是JAVA中相对复杂的一些概念,主体内容如下图所示. 反射reflect是理解Java语言工作原理的基础,Java编译器首先需要将我们编写的 ...

  9. Maya API编程快速入门

    一.Maya API编程简介 Autodesk® Maya® is an open product. This means that anyone outside of Autodesk can ch ...

随机推荐

  1. 百度云观测优化建议解决方案:未设置max-age或expires

    网页的缓存是由 HTTP 消息头中的 “Cache-control” 来控制的,常见的取值有 private.no-cache.max-age.must-revalidate 等,默认为private ...

  2. rsync相关整理

    第一部分 rsync服务端配置 1.下载安装 a. yum安装.  yum install rsync    b. 下载rsync安装文件安装        #tar zxvf rsync-2.6.9 ...

  3. 《python基础教程》笔记之 元组

    元组不能修改,创建语法很简单:使用逗号分隔了一些值,则自动创建了元组. >>> 1,2,3(1, 2, 3)>>> 1,(1,) 元组的节本操作同列表相同,除了没有 ...

  4. GetMemory 函数解析

    GetMemory函数 代码1: void GetMemory(char *p){ p = (char*)malloc(100);}int main(int argc, char *argv[]){ ...

  5. SQL判断一个数是整数还是小数

    DECLARE @number1 AS numeric(10,2),@number2 AS numeric(10,2) SELECT @number1=10.00,@number2=10.2 SELE ...

  6. android 之 百度地图

    简介 百度地图Android定位SDK为基于移动客户端开发LBS应用提供基础定位能力. 功能介绍 功能介绍: 地图展示:包括2D图.卫星图.3D图地图展示. 地图操作:提供控制平移.缩放.底图旋转.变 ...

  7. NOI2011 NOI嘉年华

    http://www.lydsy.com/JudgeOnline/problem.php?id=2436 首先离散化,离散化后时间范围为[1,cnt]. 求出H[i][j],表示时间范围在[i,j]的 ...

  8. NOI2013 UOJ122 向量内积

    神题...... 还是大神讲得比较清晰~orz http://dffxtz.logdown.com/posts/197950-noi2013-vector-inner-product 启发题:poj3 ...

  9. zoj3640:概率(期望)dp

    题目大意:有一个吸血鬼,初始攻击力为f,每天随机走到n个洞里面,每个洞有一个c[i],如果他的攻击力f>c[i] 则可以花费t[i] 的时间逃走,否则则花费一天时间使自己的攻击力增加c[i],求 ...

  10. 【剑指offer】面试题36:数组中的逆序对

    题目: 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数. 思路: 归并排序的合并过程.主要是考虑合并两个有序序列时,计算逆序 ...