• 6月14 空控制器和空操作及命名空间


    空操作和空控制器处理

    空操作:就没有指定的操作方法

    空控制器:没有指定控制器

    1.空操作:(Admin是不存在的)

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

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

           在OOP里边,对象调用本身不存在方法,处于用户体验比较好的角度考虑,我们可以在类里边制作一个魔术方法:function __call();

    在tp里面控制器的父类:

    父类中有个方法:

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

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

    ②     给空操作的名称制作一个同名的模板出来,系统会自动调用(之前可以后来不可以)

    <?php
    namespace HomeController;
    use ThinkController;
    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 HomeController;
    use ThinkController;
    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 AdminController;
    use ThinkController;
    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框架的初始命名空间是:ThinkPHPLibrary

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

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

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

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


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

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

  • 相关阅读:
    【转】MySQL导入数据乱码的分析与解决
    查看MySQL的warning
    修改MySQL字符集
    【转】PHP乱码问题,UTF8(乱码)
    马哥Linux——第一周作业
    马哥Linux——第二周作业
    .Net内部运行过程
    Html那些事
    面向对象图解、类型转换图解,写给.Net新手
    javascript对于DOM加强
  • 原文地址:https://www.cnblogs.com/Duriyya/p/5588244.html
Copyright © 2020-2023  润新知