一、thinkphp是通过访问操作方法来访问页面的,如果出现不存在的方法就会报错,为了使用户有更好的体验,我们就要是报错的页面简单易懂,先看一下页面原先的报错:
这样的报错如果不是程序员的话就会看不懂,所以我们要将这样的报错改成用户能够清晰明白的方式,其实很简单,只需加一个方法就可以了:
namespace HomeController; use ThinkController; class MainController extends Controller{ public function _empty(){ echo "您访问的页面不存在"; } }
这样再次访问不存在操作方法的页面时就会提示用户您访问的页面不存在:
当然如果是控制器不存在的话,也是一样,不过要在controller文件内新建一个EmptyController.class.php文件:
<?php namespace HomeController; use ThinkController; class EmptyController extends Controller { public function _empty(){ echo "您访问的控制器不存在"; } }
这样就可以提示您访问的控制器不存在了。
二、thinkphp有一个非常重要而且特别的地方,就是它需要使用命名空间,也就是namespace,命名空间相当于是一种虚拟目录,它有如下特点:
命名空间:相当于虚拟目录
目的:是为了自动加载类
1、初始命名空间:Library
2、根命名空间:
第一部分:Library下面的所有文件夹
第二部分:应用程序模块名
3、TP框架下所有类都要写命名空间
写命名空间怎么写:
从根开始写,写到该文件所在的目录为止。
4、用命名空间怎么用:use
从根开始写,写到类名为止。
5、不适用use的情况下怎么使用命名空间:
从初始命名空间开始找,到类名为止。
new HomelibsDBDA();
下面具体说明一下命名空间的使用:
我们在Home文件夹下的controller文件夹内新建一个MainController.class.php的文件,那么它的命名空间就要这么写:
namespace HomeController;//Home是根文件夹,Controller是该文件所在文件夹 use ThinkController;//ThINK是根文件夹,Controller是该文件所在文件夹
我们在命名空间的一个操作方法下还可以调用其它的操作方法:
<?php namespace AdminController; use ThinkController; 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 HomeController;//Home是根文件夹,Controller是该文件所在文件夹 use ThinkController;//ThINK是根文件夹,Controller是该文件所在文件夹 class MainController extends Controller{ public function mains(){ //echo "main"; $db = newHomelibsDBDA(); echo $db->dbname; } }
这样就输出了数据库名:test。