thinkphp第1課:使用thinkphp創建一個項目


一、thinkphp第一課:
1、在網站根目錄下,建立一個項目名稱orange;
2、在orange目錄下,創建一個入口文件index.php:
<?php
define('APP_DEBUG',true); //開啟調試模式
require('../TP/ThinkPHP.php');
?>

3、下載thinkphp核心包並解壓,放在網站根目錄下(與orange同級,這樣做的目的是為了方便多個項目調用。如果你只有一個項目,那么可以放在orange目錄下)。我這里文件夾名改成了TP。
4、在瀏覽器打開 http://localhost/orange/,便可以看到thinkphp的歡迎頁面了。
5、同時, 你也會發現,在orange目錄下,創建了一系列的目錄。

二、瀏覽器訪問 http://localhost/orange/ 時,發生了什么?think的執行流程是怎么樣的

(1)第一步:引入框架下的 thinkphp.php
<?php
// ThinkPHP 入口文件
//記錄開始運行時間
$GLOBALS['_beginTime'] = microtime(TRUE);
// 記錄內存初始使用
// PHP5.2及以后的版本,提供了一個編譯選項,允許不編譯此函數(memory_get_usage)。也就是有可能不存在此函數,所以先進行判斷
define('MEMORY_LIMIT_ON',function_exists('memory_get_usage'));
if(MEMORY_LIMIT_ON) $GLOBALS['_startUseMems'] = memory_get_usage();
//計算當前應用頁面的絕對地址(調用頁面所在的目錄)
//本實例:APP_PATH項目目錄——>D:/www/Apache2.2/htdocs/orange/
defined('APP_PATH') or define('APP_PATH', dirname($_SERVER['SCRIPT_FILENAME']).'/');
//計算出運行臨時目錄;如果手工設定RUNTIME_PATH,則以手工定義的常量為准
//本實例:RUNTIME_PATH臨時目錄——>D:/www/Apache2.2/htdocs/orange/Runtime/
defined('RUNTIME_PATH') or define('RUNTIME_PATH',APP_PATH.'Runtime/');
//是否開啟調試選項,如果定義了常量,則以定義的為准;未定義,則為flase
//如果不開啟調試,則在項目目錄下有一個~runtime.php的緩存。具體見框架目錄下的runtime.php代碼
//我們在本地做測試,需要在入口文件開啟調試,即修改后立即生效,如果出錯,頁面會輸出詳細的錯誤信息
defined('APP_DEBUG') or define('APP_DEBUG',false); // 是否調試模式
//模式:不同的模式,生成不同的runtime.php。暫時用不着
//比如,定義一個mini,則生成~mini_runtime.php
$runtime = defined('MODE_NAME')?'~'.strtolower(MODE_NAME).'_runtime.php':'~runtime.php';
//根據模式算出運行文件的路徑 ~runtime.php
//本實例:RUNTIME_FILE運行文件的路徑——>D:/www/Apache2.2/htdocs/orange/Runtime/~runtime.php
defined('RUNTIME_FILE') or define('RUNTIME_FILE',RUNTIME_PATH.$runtime);
if(!APP_DEBUG && is_file(RUNTIME_FILE)) {
// 部署模式直接載入運行緩存
require RUNTIME_FILE;
}else{ //第一次運行時,走這條路線
// 系統目錄定義
defined('THINK_PATH') or define('THINK_PATH', dirname(__FILE__).'/');
// 加載運行時文件
//THINK_PATH 為框架的路徑
require THINK_PATH.'Common/runtime.php';
}

thinkphp.php文件,定義了常量app_name和think_path(大寫),並引入runtime.php

(2)第二步,加載框架下的 Common/runtime.php文件
1)、再次定義了一些常量,具體見源碼;
2)、創建項目目錄結構(由build_app_dir()方法創建;
3)、如果app_dubug設置為false,則把核心加載文件進行編譯。否則,刪除編譯文件,即項目下的~runtime.php文件;
4)、調用框架TP下的 lib/core/Think.class.php 文件——>執行入口 Think::Start()。

(3)第三步,執行框架TP下的 lib/core/Think.class.php 的start()方法
1)、接第二步,開始執行入口文件Think::Start()。包括聲明錯誤處理句柄、異常處理句柄,並聲明類的自動加載機制;
2)、Think::buildApp(); //初始化app運行,即項目預編譯,加載項目的各種配置文件,大約有10個文件左右。
3)、加載完配置文件后,執行app::run

(4)第四步,執行框架下的 lib/core/App.class.php下的run方法
1)、執行app下init()靜態方法:分析url,得出調用哪個控制器。
2)、執行app下exec靜態方法:根據計算出來的模型和方法,實例化該module,並執行action相應的方法。本實例找到的項目下 lib/action目錄下的 IndexAction.class.php,並執行index()方法。

經過了以上這么多的步驟,我們終於是看到了瀏覽器上顯示的 thinkphp歡迎頁面。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM