【PHP Basic Class Library】Prototypeプロトタイプ版の指導記事!
はじめに 皆さんこんにちは、Shi Buyi です。今日は PHP 基本クラス ライブラリのプロトタイプ バージョンに関する教育記事をお届けしました。この作業ラインは、JavaScript フロントエンド フレームワーク (カプセル化ライブラリ)、PHP テンプレート エンジン、および PHP 基本クラス ライブラリの 3 つの主要なカテゴリに分類されています。このライブラリは3ヶ月近く断続的に開発が行われていたため、今まで開発が遅れていたことを恥ずかしく思いながらも解消しました。このライブラリは主に、データベース操作モジュール、ページングモジュール、ファイルアップロードモジュール、サムネイルモジュールの5つの主要なモジュールに分かれています。 検証コードモジュール。
Get この記事は、このクラス ライブラリの教育部分であり、いくつかのサンプル ソースを通じて説明されます。このライブラリの使い方をみんなに教えてください。その前に、他の学生は私の個人的な公式 Web サイトにアクセスして、クラス ライブラリのソース コードを取得し、デモ プログラムを表示して実行し、クラス ライブラリの API ドキュメントを読むことができます。以下のリンクにアクセスすると、対象のコンテンツに移動します。この記事は、より多くの学術関係者に参照していただけるよう、4 つの主要なテクノロジー ブログ、Blog Park、51CTO、ITeye、CSDN にも公開されます。に。 !
私の公式ウェブサイト: 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.2、5.3、および 5.4 の場合、この範囲を下回っても、上回っても、このクラス ライブラリは実行できません。また、PHP 拡張機能には厳しい制限が設けられています。制限事項として、Windows プラットフォームを例に挙げると、PHP を同時に有効にする必要があります: php_mysql.dll、php_mysqli.dll、php_mbstring。 dll と php_gd2.dll 4 拡張機能が完全に実行されるまで待ちます。
ディレクトリ構造ここで、正式に教育テキストに入ります。クラス ライブラリについて説明する順序は、データベース操作モジュール、ページング モジュール、ファイル アップロード モジュール、サムネイル モジュール、検証コード モジュールです。始める前に、まずクラス ライブラリのファイル ディレクトリ構造について詳しく説明します。デモプログラムを対象として、公式Webサイトからダウンロードできます。
上の図はクラスライブラリデモプログラムのファイルディレクトリ構造を示していますので、各ディレクトリとファイルの意味を説明します作者は Windows 7 環境で ZendStudio 7.2.1 統合開発環境を使用しているため、他の環境で開発プラットフォームを使用している場合は、その方向とファイルディレクトリ表示のアイコン 若干異なる場合があります。
Classes_Prototype : クラス ライブラリ デモ プログラム全体のプロジェクト名は、プロジェクト全体のルート ディレクトリ名でもあります。皆さんがダウンロードするデモ プログラムのディレクトリには中国語名が付いているため、実行する前に英語名に修正してください。一部のプラットフォームでは中国語名がサポートされていません。
/classes: このディレクトリには、クラス ライブラリ内のすべてのクラス ファイルが保存されます。独自のプロジェクトを開発したり、クラス ライブラリを学習したりする場合は、classes ディレクトリ内のクラス ファイルを分離して、独自のプロジェクトに移動できます。
/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');// 设置分页主键,前后空格会自动移除,默认为: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 语句的增、删、改、查进行集成封装,外部调用更加简单;分页模块则会增加表单页码跳转功能,在数据量很大的时候即使是数字分页,想要跳转至中间某一页码并不是很方便,而表单页码则很好的解决了这一问题;文件上传模块会在细分出图片上传,并且针对图片上传做出更加具体的功能,比如:限制图片上传的尺寸大小;缩略图模块则会针对水印做出进一步的改进,例如用户可以自定义水印的方位,目前只能显示在缩略图的右下角;验证码模块会新增自定义背景图功能,用户可以插入多张背景图作为验证码的背景,每次刷新后会随机更换背景图。