• Thinkphp框架感悟(一)


    一、assign()

    /** * 分析:
    * 此处是Controller类里面的assign方法,我们一般写的控制器所调用的assign方法就是调的这个。
    * 而这个方法就干了三件事:1、获取传过来的$name$value2、当前对象调用view类里的assign方法并传入$name$value3、传给返回当前对象。
    * 这个view是一个变量,也是一个对象。在前几行先是声明了view这个变量,然后把view类实例化成view对象写在了构造函数里* 其中的return $this 是返回了当前对象,目的是为了连续操作,类似于tp框架里的sql连续操作。(但我目前还没看到哪里对assign方法用到了连续操作)
    */
    protected function assign($name,$value='') {
    $this->view->assign($name,$value);
    return $this;
    }
    
    
    /** * 分析:
    * 此处是view类中的assign方法,被controller中的view对象调用。
    * 首先判断$name是否为一个数组,
    * 如果是一个数组,则将它赋值个给tvar,因为tvar是空数组,所以tvar就是$name.
     * 如果不是一个数组,则将tvar变成一个二维数组,其中的某一个键值对来放$name$value,如果有新的$name$value则继续放到这个二维数组里
    * 这里这个tVar会在之后用到(display()函数内还会还继续操作view对象)
    *
     * 所以在应用中,我们不能在一个方法里对assign传入两个相同的$name,应用这样的话后一个$value会覆盖前一个$value
     */
    public function assign($name,$value=''){//下面的tVar是一个数组
    if(is_array($name)) {//判断$name是否维数组
    $this->tVar   =  array_merge($this->tVar,$name);//array_merge将两个数组合为一个数组,此处之所以是$this->tVar,我估计应该是强调这个tVar是本对象内的tVar
    }else {
    $this->tVar[$name] = $value;
        }
    }
    

    二、display()

    这个函数看的不是很懂,日后有机会一定深入探究

    /**
     * 模板显示 调用内置的模板引擎显示方法,
    * @access protected
     * @param string $templateFile 指定要调用的模板文件
    * 默认为空 由系统自动定位模板文件
    * @param string $charset 输出编码
    * @param string $contentType 输出类型
    * @param string $content 输出内容
    * @param string $prefix 模板缓存前缀
    * @return void
     *
     * 分析:
    * 此处是父控制器controller中的display方法。
    * 有五个可选传入参数
    * 这个方法的作用是调用view对象的display方法,并传入5个可选参数。(一般我用display时是不传参数的)
    */
    protected function display($templateFile='',$charset='',$contentType='',$content='',$prefix='') {
    $this->view->display($templateFile,$charset,$contentType,$content,$prefix);
    }
    
    
    /** * 这是view对象中的display方法。
    * 这个方法一共实现了两个步骤:1、调用当前view对象的fetch方法获取并解析模板(html页面)内容,将其赋值给$content2、调用当前对象的render方法输出模板。
    */
    public function display($templateFile='',$charset='',$contentType='',$content='',$prefix='') {
        G('viewStartTime');
    // 解析并获取模板内容
    $content = $this->fetch($templateFile,$content,$prefix);
    // 输出模板内容
    $this->render($content,$charset,$contentType);
    }
    
    
    /** * 这是view对象中的display方法。
    * 这个方法一共实现了两个步骤:1、调用当前view对象的fetch方法获取并解析模板(html页面)内容,将其赋值给$content2、调用当前对象的render方法输出模板。
    */
    public function display($templateFile='',$charset='',$contentType='',$content='',$prefix='') {
        G('viewStartTime');
    // 解析并获取模板内容
    $content = $this->fetch($templateFile,$content,$prefix);
    // 输出模板内容
    $this->render($content,$charset,$contentType);
    }
    
    其中:fetch方法显示自动定位了模板路径,然后利用之前assign方法得到的tVar数组,来解析模板,将所要替换的标签替换。最终将解析完的模板转化成一个字符串。
    之后render方法再将之前得到的模板字符串echo出来。
    (这fetch和render函数的大体步骤差不多如此,但里面还有很多细节我没有看懂,有待细究)。
    


  • 相关阅读:
    java程序员必读的书籍(适合于本人)
    面试第三天
    sql常用的函数(持续更新中)
    linux 常用命令
    drf的Response返回字符串有问题
    celery pip仓库上的代码有问题 请使用git上最新版
    PyCrypto已放弃维护 请使用PyCryptodome
    django+celery实现异步任务
    利用Oh-My-Zsh打造你的超级终端---待排版
    pycharm搭配docker本地调试
  • 原文地址:https://www.cnblogs.com/red-code/p/5288645.html
Copyright © 2020-2023  润新知