background image

利用 PHP 的 OOP 特性实现数据保护

在 PHP 4 中,声明变量通常使用 var,而在 PHP 5 中,可使用面向对象编程(OOP)的
特性来自定义数据的可见性--即可访问性,可见性在此与变量作用域非常类似,但提供
了 更 好 的 控 制 机 制 , 有 以 下 三 种 类 型 的 可 见 性 修 饰 符 :  
    Public ( 默 认 ) -- 变 量 可 在 全 局 范 围 内 访 问 或 修 改 。
  Protected--变量只能在类本身及直接派生(使用 extends 语句)类内访问或修改。
 

 

Private--

访

  与接口实现类似,在程序中违反这些规则将会导致严重的错误;且与接口类似的是 ,
它们的存在纯粹是为了方便程序员。但这并不意味着可以忽略它们,指定某个类成员变量
的 可 见 性 , 可 保 护 对 象 内 的 数 据 免 受 外 界 影 响 。
  假设有一个 MySqlDB 类,一个$link 变量在其中声明为 private,这意味着这个变
量只能从对象内部使用$this 变量访问,这防止了类外其他对象或函数的意外覆盖,在此,
我 们 将 使 用 可 见 性 特 性 帮 助 我 们 创 建 一 个 query 对 象 。
  你可以把 query 当作一个单独的实体,它可以执行,并且返回结果。一些数据库系
统也具有存储过程,存储过程与函数很相似,它们存储查询语句,并在调用时接受相应
的参数,但 MySQL 在 5.1 版本之前并没有提供类似功能,某些其他类型的数据库管理

  在本文中,将把上述两个特性结合进示例的 query 对象中,示例将模拟一个基本的
存储过程,并在内部保存结果指针。目前,重点是从对象中执行 query,在此可以调用
MySqlDB

query()

    可 在

query

对 象 中 定 义 如 下 的

public

函 数 :

  __construct()--构造函数接受一个包含了实现 DB 接口对象实例引用的参数。
  prepare()--函数 prepare()初始化 query 的存储过程。它可能包含一个或多个有限
的占位符,而其将会作为参数传递给 execute()函数。占位符定义为与参数个数有关的一
个 冒 号 紧 跟 一 个 整 数 及 与 参 数 类 型 有 关 的 一 个 字 母 。
    包 含 占 位 符 的 一 个 简 单 的 query 看 起 来 像 以 下 这 样 :
SELECT

 

col1,col2

 

FROM

 

table_name

 

WHERE

 

col1=:1I 

  execute()--函数 execute()将执行 query。如果它被 prepare()函数过早地初始化为
一个存储过程,任何传递进来的参数都会被作为存储过程的执行参数,否则,第一个参
数 只 会 被 作 为 查 询 文 本 。 函 数 execute() 将 返 回 执 行 查 询 后 的 结 果 。
  compile()--函数 compile()与函数 execute()类似,实际上,query 并没有执行,
而是替换查询字符串中所有占位符,接受存储过程的参数,并返回 query 的编译版本。
 

 

  正如上面所提到的,可见性的概念可用于隐藏对象的内部工作,保护内部工作所需
的数据完整性。前面已经解释,query 返回的结果指针将会保存为 protected 属性,在此
使用保护成员是因为从 query 对象派生出来的特定数据库 query 对象可能会重载某些核

 

 

    理 论 说 够 了 , 现 在 开 始 编 写 代 码 , 首 先 , 创 建 一 个 例 1 所 示 的 模 板 :
 

 

1

query

class

 

DBQuery

{
 

/**