在PHP 中声明变量通常使用var而在PHP 中可使用面向对象编程(OOP)的特性来自定义数据的可见性即可访问性可见性在此与变量作用域非常类似但提供了更好的控制机制有以下三种类型的可见性修饰符
Public(默认)变量可在全局范围内访问或修改
Protected变量只能在类本身及直接派生(使用extends语句)类内访问或修改
Private变量只能在类内部访问或修改
与接口实现类似在程序中违反这些规则将会导致严重的错误且与接口类似的是它们的存在纯粹是为了方便程序员但这并不意味着可以忽略它们指定某个类成员变量的可见性可保护对象内的数据免受外界影响
假设有一个MySqlDB类一个$link变量在其中声明为private这意味着这个变量只能从对象内部使用$this变量访问这防止了类外其他对象或函数的意外覆盖在此我们将使用可见性特性帮助我们创建一个query对象
你可以把query当作一个单独的实体它可以执行并且返回结果一些数据库系统也具有存储过程存储过程与函数很相似它们存储查询语句并在调用时接受相应的参数但MySQL在版本之前并没有提供类似功能某些其他类型的数据库管理系统也没有
在本文中将把上述两个特性结合进示例的query对象中示例将模拟一个基本的存储过程并在内部保存结果指针目前重点是从对象中执行query在此可以调用MySqlDB对象的query()函数
可在query对象中定义如下的public函数
__construct()构造函数接受一个包含了实现DB接口对象实例引用的参数
prepare()函数prepare()初始化query的存储过程它可能包含一个或多个有限的占位符而其将会作为参数传递给execute()函数占位符定义为与参数个数有关的一个冒号紧跟一个整数及与参数类型有关的一个字母
包含占位符的一个简单的query看起来像以下这样
SELECT col
col
FROM table_name WHERE col
=:
I
execute()函数execute()将执行query如果它被prepare()函数过早地初始化为一个存储过程任何传递进来的参数都会被作为存储过程的执行参数否则第一个参数只会被作为查询文本函数execute()将返回执行查询后的结果
compile()函数compile()与函数execute()类似实际上query并没有执行而是替换查询字符串中所有占位符接受存储过程的参数并返回query的编译版本