第四步:Think類的實現之URL模式
要實現像thinkphp類似URL訪問模式。
比如訪問:http://127.0.0.1/index.php/Home/Index/index
通過使用:$_SERVER['PATH_INFO']便能得到:/Home/Index/index
在thinkphp中,Home表示模塊,Index表示控制器,index表示操作。
而實際上,控制器是某個類的名字,而操作,其實就是類中的操作。
比如我們訪問上面那個網址,那麼就可以得到,是Home目錄下的IndexController類中的index函數。
所以,我們可以這樣做:
$test = new IndexController;
$test->index();
在這裏,不需要將IndexControll.class.php這個文件給包含進來,因爲autoload這個函數會將我們的IndexController.class.php自動加載進來。
首先,在Library/think中創建一個名爲app.class.php的文件:
代碼如下:
然後未來測試,我們添加一個控制器文件:
運行:127.0.0.1/tp_an/便可瀏覽到如下效果:
而如果是:127.0.0.1/tp_an/index.php/Home/Index/test:
好了,現在我們已經基本實現了thinkphp的url模式了,最後再來看下:
比如輸入:127.0.0.1/tp_an/index.php/Home/Index/test.
那麼,實例化類應該是:
$Controller=newHome\Controller\IndexController;
$Controller->$ACT();
這裏,由於IndexContoller.class.php這個文件沒有被加載,因此無法實例化該類,所以autoload會被自動調用,然後將該文件給加載進來。
但是在IndexController.class.php中,可以看到我們的類名是IndexController,而不是Home\Controller\IndexController,那麼我們該怎麼讓系統實例化我們的類呢?
其實,我們可以看到IndexController.class.php文件的第一行是;
Namespace Home\Controller;
通過這個,我們不僅可以定位到我們的類文件的位置,而且還能正常地實例化我們的類。