zoukankan      html  css  js  c++  java
  • thinphp讲解(三)——空操作、空控制器、跨控制器、命名空间

    一、“空操作”本质意思:一个对象(控制器)调用本身不存在的操作方法

        一般网站处于安全考虑不给用户提示任何错误信息

    在tp里面控制器controller.class.php里有个_call()方法

    所以空操作有两种解决方案:

    ①     在对应的控制器里边制作一个方法,名称为”_empty”,这个控制器的空操作都会自动执行该方法。(推荐使用)

    function _empty()  //解决方案一
    	{
    		echo "网页不存在,请检查浏览器信息!";
    	}
    

      

    ②     给空操作的名称制作一个同名的模板出来,系统会自动调用

    二、空控制器是指没有找到指定的类

      ThinkPHP/Library/Think/App.class.php  框架应用文件

    在App.class.php内部包括控制器对象创建,以及对象调用指定的方法呈现内容:

       

    空控制器处理方案:可以再制作一个控制器,名称EmptyController.class.php

    在该控制器内部其实只需要制作一个_empty()方法即可。

    三、跨控制器调用

    1.跨控制器(在同一模块下)调用操作方法

       例:在MainController.class.php的ShuChu()操作方法里调用IndexController.class.php里的shuchu()方法

    <?php
    namespace HomeController;
    use ThinkController;
    
    class MainController extends Controller
    {
             function ShuChu()  
    	{
    		//跨控制器(在同一模块下)调用操作方法
    		//方式一:造对象
    		//$index=new IndexController();
    		//echo $index->ShuChu();
    		
    		//方式二:使用A方法来造对象
    		//$index=A("Index");  //A括号里的参数是  A([模块/]控制器标志)
    		//echo $index->ShuChu();
    		
    		//方式三:使用R方法:造对象并且调用某个特定方法 R([模块/]控制器标志/操作方法)
    		//echo R("Index/ShuChu");  
             }
    }
    

    2.跨模块调用操作方法

       例:在MainController.class.php的ShuChu()操作方法里调用Admin模块下TestController.class.php里的Test()方法  

    <?php
    namespace HomeController;
    use ThinkController;
    
    class MainController extends Controller
    {
           function ShuChu()
           {
                    //跨模块调用
    		//A方法
    		//$test=A("Admin/Test");
    		//echo $test->Test();
    		
    		//R方法
    		//echo R("Admin/Test/Test");
           }
    }
    

      

    四、命名空间

    相当于一个虚拟的目录

    正常管理文件使用文件夹--物理区分


    TP框架的初始命名空间是:ThinkPHPLibrary

    在TP框架下命名空间里面使用代表的是初始命名空间(ThinkPHPLibrary)

    1.系统目录下根命名空间是ThinkPHPLibrary下面的文件夹名称命名的

    2.模块的根命名空间是以模块名命名的

    在定义命名空间的时候需要从根写起例如:HomeController 例如:ThinkModel


    如果要使用某个类文件,引入该类命名空间的时候:
    使用use关键字,后面写该类的命名空间 后面加上 "文件名"

    如果不想引入命名空间:在造类的对象的时候可以使用(初始命名空间)来找到对应的类
    例如:new ThinkPage(30);

  • 相关阅读:
    swagger序列化对example属性的特殊处理造成的json格式异常问题
    Elasticsearch 6.2.4 xpack白金版破解-仅供交流学习使用
    Logback多进程写入同一日志文件时滚动日期混乱问题
    mycat事务中上来执行select马上提交——小猫如此折腾,我选dble
    我家很管事的猫——mycat初步部署实践与问题排查
    certbot https签发证书与自动更新——acme实在太难用,certbot一键式全搞定
    自力更生Collections.sort发现比较结果混乱?Comparator的锅还是强转类型导致?
    Java SPI、servlet3.0与@HandlesTypes源码分析
    真——Springcloud支持Https
    Controller层的方法访问标志与Spring装配与AspectJ切面处理
  • 原文地址:https://www.cnblogs.com/zst062102/p/5598278.html
Copyright © 2011-2022 走看看