6月14 空控制器和空操作及命名空间
Posted Durriya
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了6月14 空控制器和空操作及命名空间相关的知识,希望对你有一定的参考价值。
空操作和空控制器处理
空操作:就没有指定的操作方法
空控制器:没有指定控制器
1.空操作:(Admin是不存在的)
一般网站处于安全考虑不给用户提示任何错误信息
“空操作”本质意思:一个对象(控制器)调用本身不存在的方法
在OOP里边,对象调用本身不存在方法,处于用户体验比较好的角度考虑,我们可以在类里边制作一个魔术方法:function __call();
在tp里面控制器的父类:
父类中有个方法:
所以空操作有两种解决方案:
① 在对应的控制器里边制作一个方法,名称为”_empty”,这个控制器的空操作都会自动执行该方法。(推荐使用)
② 给空操作的名称制作一个同名的模板出来,系统会自动调用(之前可以后来不可以)
<?php namespace Home\\Controller; use Think\\Controller; class MainController extends Controller { public function Xianshi() { echo "Hello<br>"; } public function _empty() { echo "空操作,网页不存在,请检查浏览器信息";//http://localhost:8080/tp/index.php/Home/Login/Admin(admin不存在) }
现在的运行结果更为安全
2.空控制器
空控制器:在实例化控制器对象的时候,没有找到指定的类
什么时候实例化控制器对象:ThinkPHP/Library/Think/App.class.php
熟记文件:
index.php 入口文件
ThinkPHP/ThinkPHP.php 框架核心文件
ThinkPHP/Library/Think/Think.class.php 框架核心文件
ThinkPHP/Library/Think/App.class.php 框架应用文件
在App.class.php内部包括控制器对象创建,以及对象调用指定的方法呈现内容:
空控制器处理方案:可以再制作一个控制器,名称EmptyController.class.php
在该控制器内部其实只需要制作一个_empty()方法即可。
<?php namespace Home\\Controller; use Think\\Controller; class EmptyController extends Controller { public function _empty() { echo "空控制器,访问页面不存在"; } }
现在的运行结果:
3.跨控制器调用
跨控制器的调用可以省去很多的代码,更让人看清楚,
一个控制器在执行的时候,可以实例化另外一个控制,并通过对象访问其指定方法。
3.1同一模块下的操作
如下所示操作同一模块下的MainController.class.php和IndexController.class.php
在IndexController.class.php里面新建方法Shuchu
public function Shuchu() { echo "最喜欢的是你懂得"; }
在MainController.class.php里面新建方法Shishi
A(“[模块/]控制器标志”) 实例化控制器对象
R([模块/]控制器标志/操作方法)
public function Shishi() { //造对象 //$index = new IndexController; //echo $index->Shuchu(); //使用A方法 //$index = A("Index"); //echo $index->Shuchu(); //使用R方法,造对象并且调用某个特定的操作方法 echo R("Index/Shuchu"); }
运行过后的结果:
3.2不同模块下的操作
仿照Home模块新建Admin里面的东西包含的目录都要一致
在Controller目录下新建TestController.class.php
<?php namespace Admin\\Controller; use Think\\Controller; class TestController extends Controller { public function Test() { //echo "hello"; return "是Admin模块下的内容"; } }
现在想要在Home/Controller/ MainController.class.php中也调用Text()方法
public function Shishi() { //跨模块调用 //$test = A("Admin/Test"); //echo $test->Test(); echo R("Admin/Test/Test"); }
运行后的结果:
4.命名空间
命名空间:
相当于一个虚拟的目录
正常管理文件使用文件夹--物理区分
TP框架的初始命名空间是:ThinkPHP\\Library
在TP框架下命名空间里面使用\\代表的是初始命名空间(ThinkPHP\\Library)
1.系统目录下根命名空间是ThinkPHP\\Library下面的文件夹名称命名的
2.模块的根命名空间是以模块名命名的
在定义命名空间的时候需要从根写起例如:Home\\Controller 例如:Think\\Model
如果要使用某个类文件,引入该类命名空间的时候:
使用use关键字,后面写该类的命名空间 后面加上 "\\文件名"
如果不想引入命名空间:在造类的对象的时候可以使用\\(初始命名空间)来找到对应的类
例如:new \\Think\\Page(30);
以上是关于6月14 空控制器和空操作及命名空间的主要内容,如果未能解决你的问题,请参考以下文章