一、thinkphp是通過訪問操作方法來訪問頁面的,如果出現不存在的方法就會報錯,為了使用戶有更好的體驗,我們就要是報錯的頁面簡單易懂,先看一下頁面原先的報錯:
這樣的報錯如果不是程序員的話就會看不懂,所以我們要將這樣的報錯改成用戶能夠清晰明白的方式,其實很簡單,只需加一個方法就可以了:
namespace Home\Controller; use Think\Controller; class MainController extends Controller{ public function _empty(){ echo "您訪問的頁面不存在"; } }
這樣再次訪問不存在操作方法的頁面時就會提示用戶您訪問的頁面不存在:
當然如果是控制器不存在的話,也是一樣,不過要在controller文件內新建一個EmptyController.class.php文件:
<?php namespace Home\Controller; use Think\Controller; class EmptyController extends Controller { public function _empty(){ echo "您訪問的控制器不存在"; } }
這樣就可以提示您訪問的控制器不存在了。
二、thinkphp有一個非常重要而且特別的地方,就是它需要使用命名空間,也就是namespace,命名空間相當於是一種虛擬目錄,它有如下特點:
命名空間:相當於虛擬目錄
目的:是為了自動加載類
1、初始命名空間:Library
2、根命名空間:
第一部分:Library下面的所有文件夾
第二部分:應用程序模塊名
3、TP框架下所有類都要寫命名空間
寫命名空間怎么寫:
從根開始寫,寫到該文件所在的目錄為止。
4、用命名空間怎么用:use
從根開始寫,寫到類名為止。
5、不適用use的情況下怎么使用命名空間:
從初始命名空間開始找,到類名為止。
new \Home\libs\DBDA();
下面具體說明一下命名空間的使用:
我們在Home文件夾下的controller文件夾內新建一個MainController.class.php的文件,那么它的命名空間就要這么寫:
namespace Home\Controller;//Home是根文件夾,Controller是該文件所在文件夾 use Think\Controller;//ThINK是根文件夾,Controller是該文件所在文件夾
我們在命名空間的一個操作方法下還可以調用其它的操作方法:
<?php namespace Admin\Controller; use Think\Controller; class MainController extends Controller{ public function index(){ echo "歡迎使用Thinkphp"; } public function test(){ $this->index();//調用該控制器下的操作方法 //跨控制器調用 $l = A("Login");//創建控制器對象 $l->login(); //跨模塊調用 $m = A("Home/Main"); $m->mains(); } }
輸出結果:
還可以調用第三方類,當然要將第三方類放在根目錄下,我們在Application下新建一個文件夾libs,然后將第三方類DBDA.class.php復制過來,並加上命名空間:
<?php namespace Home\ libs; class DBDA { public $host="localhost"; public $uid="root"; public $pwd="123"; public $dbname="text_0306"; //執行sql語句,返回相應結果 //sql要執行的sql語句 //$type代表sql語句的類型,0代表增刪改,1代表查詢 function query($sql,$type=1) { $db=new MySQLi($this->host,$this->uid,$this->pwd,$this->dbname); $result=$db->query($sql); if($type) { //如果是查詢,返回數組 return $result->fetch_all(); } else { //如果是增刪改,返回true或false return $result; } } //返回字符串 public function strquery($sql) { $db=new MySQLi($this->host,$this->uid,$this->pwd,$this->dbname); $result=$db->query($sql); $arr=$result->fetch_all(); $str=""; foreach($arr as $v) { $str=$str.implode("^",$v)."|"; } $str=substr($str,0,strlen($str)-1); return $str; } //返回JSON function jsonquery($sql,$type=1) { $db = new MySQLi($this->host,$this->uid,$this->pwd,$this->dbname); $r = $db->query($sql); if($type==1) { return json_encode($r->fetch_all(MYSQLI_ASSOC));//將數組編碼成json } else { return $r; } } } ?>
然后我們調用這個類:
namespace Home\Controller;//Home是根文件夾,Controller是該文件所在文件夾 use Think\Controller;//ThINK是根文件夾,Controller是該文件所在文件夾 class MainController extends Controller{ public function mains(){ //echo "main"; $db = new\Home\libs\DBDA(); echo $db->dbname; } }
這樣就輸出了數據庫名:test。