·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> 网站建设开发 >> php网站开发 >> 【PHP 基础类库】Prototype 原型版教学文章!

【PHP 基础类库】Prototype 原型版教学文章!

作者:佚名      php网站开发编辑:admin      更新时间:2022-07-23
【php 基础类库】PRototype 原型版教学文章!

前言大家好我是:石不易,今天我为大家带来了PHP基础类库原型版的教学文章,至此本人的作品线已分为三大类,分别是:javaScript前端框架(封装库)、PHP模板引擎、以及PHP基础类库。该类库历时断断续续的开发了接近3个来月,期间有大段的空档时期没有开发,因此很惭愧一直拖到至今才算发布也了却了一桩心事。该类库主要分为5大模块,分别是:数据库操作模块分页模块文件上传模块缩略图模块以及验证码模块

获取 此文章为该类库的教学部分,会通过若干个实例源码讲解,来教大家学习使用本类库。在此之前学友们可以先访问我的个人官网进行类库源码的获取,以及查看与运行演示程序和阅读类库的API文档。访问以下链接即可传送至目标内容。本文也会分别发布至:博客园、51CTO、ITeye、CSDN等4大技术博客,供更多学友参阅!

本人官网:http://www.shibuyi.net

实例演示:http://www.shibuyi.net/demo/php/foundation_classes/prototype/

API 文档:http://www.shibuyi.net/api/php/foundation_classes/prototype/

运行环境 本次类库对 PHP 的运行环境也做出了诸多限制,目前只支持:PHP 5.25.3 以及 5.4,低于或高于此范围都将无法运行本类库;此外对于 PHP 的扩展也做出了严格的限制,以 Windows 平台为例,PHP 必须要同时开启:php_MySQL.dllphp_mysqli.dllphp_mbstring.dllphp_gd2.dll4个扩展才能够完美运行。

目录结构 下面我们正式进入类库的教学正文,我讲解的次序依次为:数据库操作模块、分页模块、文件上传模块、缩略图模块以及验证码模块,在开始之前我们先对类库的文件目录结构做一个详细的介绍,以演示程序为准,大家可去官网下载。

上图为类库演示程序的文件目录结构,那么我逐一来讲解每一个目录与文件的含义,两外笔者使用的是Windows 7环境下的ZendStudio 7.2.1集成开发环境,因此大家如果采用的是其他环境下的开发平台,文件目录显示的方位和图标可能会略有差异。

Classes_Prototype :为整个类库演示程序的项目名称也是整个项目的根目录名称,大家下载的演示程序的根目录是中文名称,因此在运行之前请先更正为英文名称,中文名在一些平台下不支持。

/classes :为整个演示程序的核心目录,该目录存放了类库中所有的类文件,大家如果要自己开发项目或者学习类库,那么可以将 classes 目录中的类文件单独抽离出来移动到你自己的项目中即可。

  1. /classes/Database.class.php :该文件是数据库操作类的主文件。(入口文件,外部直接调用)
  2. /classes/FileUpload.class.php :该文件是文件上传类的主文件。(入口文件,外部直接调用)
  3. /classes/InterfaceDatabase.class.php :该文件是数据库操作类的接口文件。(接口文件,外部无法调用)
  4. /classes/NewDatabase.class.php :该文件是 MySQLi 数据库操作类文件。(非入口文件,不建议外部直接调用)
  5. /classes/OldDatabase.class.php :该文件是 MySQL 数据库操作类文件。(非入口文件,不建议外部直接调用)
  6. /classes/Page.class.php :该文件是分页类的主文件。(入口文件,外部直接调用)
  7. /classes/Thumbnail.class.php :该文件是缩略图类的主文件。(入口文件,外部直接调用)
  8. /classes/Tool.class.php:该文件是类库的公共工具类,类库文件均有继承该类方法。(抽象类文件,外部无法调用)
  9. /classes/ValidateCode.class.php :该文件是验证码类的主文件。(入口文件,外部直接调用)

/fonts :为演示程序的字体文件目录,主要提供给缩略图与验证码使用。

/includes :为演示程序的公共文件目录,主要存放初始化和公共文件。

/styles :为演示程序的 CSS 样式目录,包括分页类的分页样式。

/uploads :为文件上传类的根目录,大家可根据需求自行修改根目录名称,如果该目录不存在,文件上传类则会自动创建,详细操作再讲到文件上传类时在详细讲解。

/watermark :为演示程序的水印图片目录,存放供缩略图使用的水印图片文件。

/classes_prototype.sql :为演示程序的数据库文件,大家可直接通过数据库(MySQL)工具将其导入即可,否则数据库功能无法演示。

/code.php :为演示程序的验证码配置和输出文件。

/thumbnail.php :为演示程序的缩略图配置和输出文件。

数据库类 首先我们来看一下数据库模块的运用。数据库模块也是本类库最复杂的一个模块,其中包含了3个类文件与 1个接口文件,我们在讲解之前先来看一下演示程序的执行效果图。

以上截图为演示程序的数据库与分页部分。在讲解数据库操作时,请大家参照 API 手册这样学习效果最佳。对类库讲解的顺序会按照 API 的接口排序依次讲解。下面我们就配合实际的代码进行讲解。

1. 数据库初始化

// 在开始之前,我们要先弄清楚数据库模块的 4 个类文件分别是用来做什么的。// 首先 Database 是数据库模块的外部调用类,所有数据库模块外部可调用的 API 均已集成在内,只需实例化后外部可直接操作。// 而 NewDatabase 与 OldDatabase 分别是 MySQLi 与 MySQL 数据库扩展的封装类,其功能已经集成到 Database 类中,因此无需分开调用,也不建议分开调用。// 最后的 InterfaceDatabase 接口类是解决前 3 个类库公共 API 的规范问题。// 那么在弄清楚了每个类文件的作用后,我们的下一步就是要配置数据库,并且要正确的配置,这样数据库模块才能够正常执行。所有的配置与操作均用 Database 类完成。// 设置数据库操作方式// true 为 MySQLi 扩展,false 为 MySQL 扩展,默认为:trueDatabase :: $type = ture;// 【必填】设置数据库地址,前后空格会被自动移除,默认为:localhostDatabase :: $host = 'localhost';// 【必填】设置数据库端口,默认为:3306Database :: $port = 3306;// 【必填】设置用户名称,前后空格会被自动移除,默认为:rootDatabase :: $username = 'louis';// 【必填】设置用户密码,默认为:空字符Database :: $passWord = 123456;// 设置数据库名称,前后空格会被自动移除,默认为:空字符Database :: $name = 'classes_prototype';// 设置字符编码,前后空格会被自动移除,默认为:utf8Database :: $charset = 'utf8';// 设置 SQL 语句转义开关// true 为打开转义开关,false 为关闭转义开关,默认为:trueDatabase :: $decodeSwitch = false;// 实例化数据库,之前配置信息全部生效$db = new Database();

以上代码为数据库的配置操作,只有将必填选项的配置都填写正确了,那么数据库在实例化时才能够被正常连接。接下来我们来运用一下 API 来对数据库数据进行:增、删、改、查等操作。

2. 选择数据库

// 指定数据库;如果 Database :: $name = '' 那么在数据库实例化时,就不会调用 set_name()// 只有 Database :: $name 被赋值了,那样才会调用 set_name() 选择该数据库// 重新设置数据库名称Database :: $name = 'classes_prototype';// 选择该名称的数据库$db -> set_name(); // 无返回值

3. 设置字符编码

// 指定字符编码;这里与指定数据库一样,如果 Database :: $charset = '' 那么 new Database() 时就不会调用 set_charset()// 当 Database :: $charset 被赋值了,那么才会调用 set_charset()// 重新设置字符编码Database :: $charset = 'utf8';// 选择该字符编码$db -> set_charset(); // 无返回值

4. 数据库查询

// 获取上一步插入操作 id$db -> get_id(); // 返回正整数值,如果没有执行任何 INSERT INTO 插入SQL 语句,那么将返回:0// 获取记录行总数,只需写入表名即可$tableName = 'cp_phone'; // $tableName 为表名$db -> get_total($tableName); // 返回正整数值,如果没有任何记录,则返回:0// 销毁结果集$db -> free_result(); // 无返回值// 获取记录行数$mode = false; // $mode 表示是否销毁当前查询结果集,true 为销毁,false 为忽略$db -> get_rows($mode); // 返回正整数值,如果没有任何记录,则返回:0// 获取操作行数$db -> get_affected(); // 返回正整数值,如果没有执行任何:增、删、改、查操作,那么则返回:0// 获取一条记录行// $sql 为单条 SQL 查询 SELECT 语句$sql = "SELECT `id`, `phone` FROM `cp_phone` WHERE `id` = 1 LIMIT 1;";$mode = false; // $mode 表示是否销毁当前查询结果集,true 为销毁,false 为忽略$db -> get_one($sql, $mode); // 返回对象// 获取多条记录行// $sql 为单条 SQL 查询 SELECT 语句$sql = "SELECT `id`, `phone` FROM `cp_phone` WHERE TRUE;";$mode = false; // $mode 表示是否销毁当前查询结果集,true 为销毁,false 为忽略$db -> get_all($sql, $mode); // 返回一维数组对象// 执行多条SQL查询// $sqls 为多条 SQL 查询 SELECT 语句,通过“;”号间隔 SQL 语句$sqls = '';$sqls .= "SELECT `id`, `phone` FROM `cp_phone` WHERE `id` = 1 LIMIT 1;";$sqls .= "SELECT `id`, `phone` FROM `cp_phone` WHERE `id` = 2 LIMIT 1;";$sqls .= "SELECT `id`, `phone` FROM `cp_phone` WHERE `id` = 3 LIMIT 1;";$db -> set_mutiple($sqls); // 返回二维数组对象

5. 数据库增、删、改操作

// 转义字符串;如果 Database :: $decodeSwitch = true 那么每次执行 SQL 语句查询或操作时,则都会先将 SQL 语句进行一次转义// 反之如果为 false 那么则忽略对 SQL 语句的转义,而直接执行$string = "SET NAMES 'utf8';"; // $string 为需要被转义的字符串,大部分时候是 SQL 语句// 进行字符串的转义,例如:\、'、"等特殊字符前导会被加上反斜杠$db -> decode($string); // 返回转义后的字符串// 执行操作语句(新增、修改、删除)// $sql 为单条 SQL 增、删、改语句$sql = "UPDATE `cp_phone` SET `phone` = '13034567890' WHERE `id` = 1 LIMIT 1;"; $db -> set_Operation($sql); // 返回执行后响应的记录行数为:正整数值// 执行多条SQL操作(新增、修改、删除)// $sqls 为多条 SQL 增、删、改语句$sqls = '';$sqls .= "UPDATE `cp_phone` SET `phone` = '13034567890' WHERE `id` = 1 LIMIT 1;";$sqls .= "UPDATE `cp_phone` SET `phone` = '13078903456' WHERE `id` = 2 LIMIT 1;";$sqls .= "UPDATE `cp_phone` SET `phone` = '15634560000' WHERE `id` = 3 LIMIT 1;";$db -> set_mutiple($sqls); // 返回执行后每条 SQL 语句响应的记录行数为:一维数组正整数值// 执行事务处理// $sqls 为多条 SQL 增、删、改语句$sqls = '';$sqls .= "DELETE FROM `cp_phone` WHERE `id` = 1 LIMIT 1;";$sqls .= "DELETE FROM `cp_phone` WHERE `id` = 2 LIMIT 1;";$sqls .= "DELETE FROM `cp_phone` WHERE `id` = 3 LIMIT 1;";$db -> transaction($sqls); // 返回布尔值,true 为执行成功,false 为执行失败

6. 关闭数据库

// 析构方法:关闭数据库// 关闭数据库的 API 无需手动调用,在执行页面脚本执行完毕后,该析构方法会自动被执行,因此关闭数据库操作完全是自动完成$db -> __destruct();

分页类 分页模块共 1 个类文件,下图为分页执行效果图,共有两种输出样式,分别为:数字分页、文本分页。

1. 分页初始化

// 【必填】设置每页显示条数,默认为:10Page :: $pageSize = 10;// 【必填】设置数据库记录总数,默认为:0Page :: $total = $db -> get_total('cp_phone');// 设置分页主键,前后空格会自动移除,默认为:pagePag