Home  >  Article  >  Backend Development  >  【PHP 基础类库】Prototype 原形版教学文章

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

WBOY
WBOYOriginal
2016-06-13 12:18:16765browse

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

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

 

获取 此文章为该类库的教学部分,会通过若干个实例源码讲解,来教大家学习使用本类库。在此之前学友们可以先访问我的个人官网进行类库源码的获取,以及查看与运行演示程序和阅读类库的API文档。访问以下链接即可传送至目标内容。本文也会分别发布至:博客园51CTOITeyeCSDN 等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.dll 等 个扩展才能够完美运行。

 

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

上图为类库演示程序的文件目录结构,那么我逐一来讲解每一个目录与文件的含义,两外笔者使用的是 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 :为演示程序的缩略图配置和输出文件。

 

数据库类 首先我们来看一下数据库模块的运用。数据库模块也是本类库最复杂的一个模块,其中包含了 个类文件与 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');// 设置分页主键,前后空格会自动移除,默认为:pagePage :: $pageKey = 'page';// 设置分页锚点,前后空格会自动移除,默认为:pPage :: $pageAnchor = 'p';// 设置分页锚点开关,true 为开启锚点功能,false 为关闭锚点功能,默认为:falsePage :: $anchorSwitch = true;// 设置分页样式开关,true 为数字分页样式,false 为文本分页样式,默认为:truePage :: $styleSwitch = true;// 设置数字分页长度,默认为:2Page :: $bothLength = 4;// 实例化分页,之前配置信息全部生效$page = new Page();

2. 分页输出

// 输出当前页码$page -> get_page() // 返回真正数值// 输出 limit$page -> get_limit() // 返回 LIMIT 字符串,例如:LIMIT 0,10// 输出分页样式// 如果 Page :: $styleSwitch 为 true 则输出数字分页的 HTML 字符串// 反之为 false 则会输出文本分页的 HTML 字符串$page -> page_style() // 返回 HTML 样式字符串

 

文件上传类 文件上传模块共 1 个类文件。

1. 上传初始化

// 【必填】设置上传主键,两边空格会自动移除,默认为:空字符FileUpload :: $uploadKey = 'up_img';// 设置新文件名称,两边空格会自动移除,默认为:空字符// 如果为空字符,那么文件名称将以日期时间代替FileUpload :: $fileName = '';// 设置上传根目录,两边空格会自动移除,默认为:'/uploads/'// 目录两边的正反斜杠,加或不加,上传类都加自动补齐FileUpload :: $rootDir = 'uploads';// 设置上传子目录,两边空格会自动移除,默认为:空字符// 目录两边的正反斜杠,加或不加,上传类都加自动补齐// 如果为空字符,那么子目录将以日期时间代替FileUpload :: $childDir = 'images';// 设置合法容量,默认为:0FileUpload :: $fileSize = 1;// 设置容量单位,默认为:'B'// 该容量单位不区分大小写,分别是:B(字节)、K/KB(千字节)、M/MB(兆字节)、G/GB(吉字节)、T/TB(太字节)FileUpload :: $sizeUnit = 'M';// 设置合法类型,默认为:空字符// 类型分为两种格式,一种是字符串格式,一种是数组格式FileUpload :: $fileType = array('image/jpeg', 'image/pjpeg', 'image/jpg', 'image/png', 'image/x-png', 'image/gif');// 保持原名开关,默认为:false// true 为开启原名,false 为关闭原名FileUpload :: $sourceSwitch = false;// 执行上传,之前设置全部生效$fileUpload = new FileUpload();

2. 获取路径

// 获取上传文件路径$fileUpload -> get_path(); // 返回上传的文件路径为:字符串

 

缩略图类 缩略图模块共 1 个类文件,下图为缩略图执行效果图。

1. 缩略图初始化

// 【必填】设置图片路径,两边空格会自动移除,默认为:空字符Thumbnail :: $path = 'uploads/images/201504162043361429188216.jpg';// 设置白色背景开关,true 为白色背景,false 为黑色背景,默认为:falseThumbnail :: $whiteSwitch = false;、// 设置输出方式开关,true 为文件输出,false 为浏览器输出,默认为:falseThumbnail :: $exportSwitch = false;// 设置统一类型开关,true 为开启统一类型,false 为关闭统一类型,默认为:trueThumbnail :: $typeSwitch = true;// 设置统一图片类型,两边空格会自动移除,默认为:'png'// 目前仅支持:png、jpeg、gif 三种格式图片Thumbnail :: $imageType = 'png';// 设置缩略方式,两边空格会自动移除,默认为:'%'// 缩略方式一共有三种:%(百分比缩略)、=(等比例缩略)、==(固定宽高等比例缩略)Thumbnail :: $thumbnailType = '==';// 设置百分比例,默认为:50Thumbnail :: $percent = 50;// 设置等比例,默认为:100Thumbnail :: $proportion = 100;// 设置固定宽度,默认为:100Thumbnail :: $fixedWidth = 280;// 设置固定高度,默认为:100Thumbnail :: $fixedHeight = 160;// 设置水印开关,true 为开启水印,false 为关闭水印,默认为:falseThumbnail :: $watermarkSwitch = true;// 设置文本水印开关,true 为文本水印,false 为图片水印,默认为:falseThumbnail :: $watermarkText = false;// 设置水印文本,两边空格会自动移除,默认为:'缩略图水印'Thumbnail :: $text = 'PHP基础类库';// 设置水印字体路径,两边空格会自动移除,默认为:空字符// 字体文件必须为:TTF 格式Thumbnail :: $fontPath = 'fonts/MSYHBD.TTF';// 设置水印图片路径,两边空格会自动移除,默认为:空字符// 水印图片宽度必须小于缩略图的二分之一,高度必须小于缩略图的四分之一,才会被显示Thumbnail :: $watermarkPath = 'watermark/watermark.png';// 设置水印字体大小,默认为:15Thumbnail :: $fontSize = 15;// 设置边框,true 为开启边框,false 为关闭边框,默认为:falseThumbnail :: $borderSwitch = true;// 实例化缩略图,之前设置全部生效new Thumbnail();

 

验证码类 验证码模块共 1 个类文件,下图为验证码执行效果图。

1. 验证码初始化

// 设置因子类型,两边空格会自动移除,默认为:'en-num'// 目前共支持三种类型,分别为:en(字母)、cn(汉字)、num(数字)// 如果为多种格式,那么需要在两种不同格式之间加上“-”用来分割ValidateCode :: $characterType = 'cn-en-num';// 设置输出方式,true 为文件输出,false 为浏览器输出,默认为:falseValidateCode :: $exportSwitch = false;// 设置输出路径,两边空格会自动移除,默认为:空字符ValidateCode :: $path = './';// 设置验证码图片名称,两边空格会自动移除,默认为:'code'ValidateCode :: $name = 'code';// 设置验证码字符个数,默认为:4ValidateCode :: $codeLength = 6;// 设置验证码图片类型,两边空格会自动移除,默认为:'png'// 目前仅支持三种格式:png、jpeg、gifValidateCode :: $imageType = 'png';// 设置验证码图片宽度,默认为:ValidateCode :: $width = 200;// 设置验证码图片高度,默认为:50ValidateCode :: $height = 50;// 设置噪点开关,true 为开启噪点,false 为关闭噪点,默认为:trueValidateCode :: $snowSwitch = true;// 设置噪点个数,默认为:100ValidateCode :: $snowTotal = 100;// 设置干扰线开关,true 为开启干扰线,false 为关闭干扰线,默认为:trueValidateCode :: $lineSwitch = true;// 设置干扰线个数,默认为:10ValidateCode :: $lineTotal = 10;// 设置字体路径,两边空格会自动移除,默认为:空字符// 字符文件必须为:TTF 格式ValidateCode :: $fontPath = 'fonts/MSYHBD.TTF';// 设置字体大小,默认为:20ValidateCode :: $fontSize = 20;// 设置边框开关,true 为开启边框,false 为关闭边框,默认为:falseValidateCode :: $borderSwitch = true;// 实例化验证码类,以上设置全部生效$validateCode = new ValidateCode();

2. 获取验证码

// 输出验证码字符$validateCode -> get_code(); // 返回生成后的验证码字符串,区分字母大小写

 

结语 经过几天断断续续的打磨,本类库的教学文章终于到了尾声。在最后我想给大家预告一下接下来的类库版本中将会新增哪些功能。首先数据库模块会专门针对 SQL 语句的增、删、改、查进行集成封装,外部调用更加简单;分页模块则会增加表单页码跳转功能,在数据量很大的时候即使是数字分页,想要跳转至中间某一页码并不是很方便,而表单页码则很好的解决了这一问题;文件上传模块会在细分出图片上传,并且针对图片上传做出更加具体的功能,比如:限制图片上传的尺寸大小;缩略图模块则会针对水印做出进一步的改进,例如用户可以自定义水印的方位,目前只能显示在缩略图的右下角;验证码模块会新增自定义背景图功能,用户可以插入多张背景图作为验证码的背景,每次刷新后会随机更换背景图。

 

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn