利用 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()将返回执行查询后的结果。