12344资源网织梦源码

CMS教程

站长学院

Thinkphp中的__DIR__ __ROOT__ __APP__ __MODULE__ APP_PATH LIB

www.12344.org/ 2019-02-23

thinkphp中的__DIR__ __ROOT__ __APP__ __MODULE__ APP_PATH LIB_PATH MODULE_PATH 等是在哪里定义的?

 
  1. 为什么会产生这样的 路径 常量等 的 困扰?
    是由于 在tp中, 使用了多种形式的常量导致的, 比如, 有php语言本身的 "魔术常量", 有 php函数, 比如dirname定义的常量, 还有 define定义的常量等等, 所以 就感到 混淆了.

  2. 魔术常量:

  3. 魔术常量和tp定义的路径常量在使用上的区别?
    魔术常量本身定义的 路径, 是不包含 后面的 '/'的;
    而tp中使用的路径常量, 如 ROOTAPP


__DIR__:
模板调整, 默认的模板替换行为只支持下列替换规则:
'ROOT' => ROOT, // 当前网站地址
'APP' => APP, // 当前应用地址
'MODULE' => MODULE,
'ACTION' => ACTION, // 当前操作地址
'SELF' => SELF, // 当前页面地址
'CONTROLLER'=> CONTROLLER,
'URL' => CONTROLLER,
'PUBLIC' => ROOT.'/Public',// 站点公共目录

对于废除的替换规则你可以在模块的配置文件中自行添加,例如:
'TMPL_PARSE_STRING'=>array(
'../Public'=> MODULE_PATH.'View/Public/',
'TMPL' => MODULE_PATH.'View/default/'
)

**因此, 你可以看到 实际上没有 PUBLIC 这个系统常量的, 只有在 模板文件中才能使用 PUBLIC, 而在 php文件中, 如各种Common目录下的配置文件 config.php中 是不能使用 __PUBLIC__的, 是无效的. **


dirname 就是 获取完整文件名的 路径部分. 注意不带, 最后的斜杠

 

结果__JS__等几个变量在模板文件中无法正确解析。原因是__PUBLIC__是模板替换变量,只有出现在模板文件中时才会被替换为对应的字符串。而__ROOT____APP____MODULE____CONTROLLER____ACTION____SELF__既是模板替换变量,也是系统常量,它们可以应用在模板文件和配置文件中,所以这里可以用__ROOT__



Home/Conf/config.php

<?php
return array(
    'TMPL_PARSE_STRING'    => array(
        '__CSS__'    =>    '__PUBLIC__/Home/css',
        '__JS__'    =>    '__PUBLIC__/Home/js',
        '__IMG__'    =>    '__PUBLIC__/Home/img',
    ),
);

结果__JS__等几个变量在模板文件中无法正确解析。原因是__PUBLIC__是模板替换变量,只有出现在模板文件中时才会被替换为对应的字符串。而__ROOT____APP____MODULE____CONTROLLER____ACTION____SELF__既是模板替换变量,也是系统常量,它们可以应用在模板文件和配置文件中,所以这里可以用__ROOT__

ROOTPUBLIC 模板常量在ThinkPHP\Library\Behavior\ContentReplaceBehavior.class.php 文件中定义