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


  1. 為什么會產生這樣的 路徑 常量等 的 困擾?
    是由於 在tp中, 使用了多種形式的常量導致的, 比如, 有php語言本身的 "魔術常量", 有 php函數, 比如dirname定義的常量, 還有 define定義的常量等等, 所以 就感到 混淆了.

  2. 魔術常量:

  3. 魔術常量和tp定義的路徑常量在使用上的區別?
    魔術常量本身定義的 路徑, 是不包含 后面的 '/'的;
    而tp中使用的路徑常量, 如 ROOT, APP


__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 就是 獲取完整文件名的 路徑部分. 注意不帶, 最后的斜杠

參考: http://www.cnblogs.com/xianglongsdu/p/5894631.html https://blog.tanteng.me/2014/11/php-line-class-dir/

結果__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 文件中定義


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM