【PHP 基礎類庫】Prototype 原形版教學文章

來源:互聯網
上載者:User
【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';// 【必填】設定使用者密碼,預設為:Null 字元Database :: $password = 123456;// 設定資料庫名稱,前後空格會被自動移除,預設為:Null 字元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. 上傳初始化

// 【必填】設定上傳主鍵,兩邊空格會自動移除,預設為:Null 字元FileUpload :: $uploadKey = 'up_img';// 設定新檔案名稱,兩邊空格會自動移除,預設為:Null 字元// 如果為空白字元,那麼檔案名稱將以日期時間代替FileUpload :: $fileName = '';// 設定上傳根目錄,兩邊空格會自動移除,預設為:'/uploads/'// 目錄兩邊的正反斜線,加或不加,上傳類都加自動補齊FileUpload :: $rootDir = 'uploads';// 設定上傳子目錄,兩邊空格會自動移除,預設為:Null 字元// 目錄兩邊的正反斜線,加或不加,上傳類都加自動補齊// 如果為空白字元,那麼子目錄將以日期時間代替FileUpload :: $childDir = 'images';// 設定合法容量,預設為:0FileUpload :: $fileSize = 1;// 設定容量單位,預設為:'B'// 該容量單位不區分大小寫,分別是:B(位元組)、K/KB(KB)、M/MB(MB)、G/GB(吉位元組)、T/TB(太位元組)FileUpload :: $sizeUnit = 'M';// 設定合法類型,預設為:Null 字元// 類型分為兩種格式,一種是字串格式,一種是數組格式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. 縮圖初始化

// 【必填】設定圖片路徑,兩邊空格會自動移除,預設為:Null 字元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基礎類庫';// 設定浮水印字型路徑,兩邊空格會自動移除,預設為:Null 字元// 字型檔必須為:TTF 格式Thumbnail :: $fontPath = 'fonts/MSYHBD.TTF';// 設定浮水印圖片路徑,兩邊空格會自動移除,預設為:Null 字元// 浮水印圖片寬度必須小於縮圖的二分之一,高度必須小於縮圖的四分之一,才會被顯示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;// 設定輸出路徑,兩邊空格會自動移除,預設為:Null 字元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;// 設定字型路徑,兩邊空格會自動移除,預設為:Null 字元// 字元檔案必須為:TTF 格式ValidateCode :: $fontPath = 'fonts/MSYHBD.TTF';// 設定字型大小,預設為:20ValidateCode :: $fontSize = 20;// 設定邊框開關,true 為開啟邊框,false 為關閉邊框,預設為:falseValidateCode :: $borderSwitch = true;// 執行個體化驗證碼類,以上設定全部生效$validateCode = new ValidateCode();

2. 擷取驗證碼

// 輸出驗證碼字元$validateCode -> get_code(); // 返回產生後的驗證碼字串,區分字母大小寫

結語 經過幾天斷斷續續的打磨,本類庫的教學文章終於到了尾聲。在最後我想給大家預告一下接下來的類庫版本中將會新增哪些功能。首先資料庫模組會專門針對 SQL 陳述式的增、刪、改、查進行整合封裝,外部調用更加簡單;分頁模組則會增加表單頁碼跳轉功能,在資料量很大的時候即使是數字分頁,想要跳轉至中間某一頁碼並不是很方便,而表單頁碼則很好的解決了這一問題;檔案上傳模組會在細分出圖片上傳,並且針對圖片上傳做出更加具體的功能,比如:限制圖片上傳的尺寸大小;縮圖模組則會針對浮水印做出進一步的改進,例如使用者可以自訂浮水印的方位,目前只能顯示在縮圖的右下角;驗證碼模組會新增自訂背景圖功能,使用者可以插入多張背景圖作為驗證碼的背景,每次重新整理後會隨機更換背景圖。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.