想象一下,我在PHP中有这个常量:
define('APP_PATH', str_replace('//', '/', str_replace('\\', '/', dirname(__FILE__) . '/')));
当我在我的应用程序中使用APP_PATH
时,PHP每次都执行代码(dirname
和str_replace
上的两个__FILE__
)或PHP执行代码一次并将结果存储在APP_PATH
中?我希望我足够清楚:)
此问题适用于PHP 5.1.0 +。
答案 0 :(得分:7)
应该在定义时进行一次。
<强>已更新强> 有关文档:define() - constants
来自文档:
常量是简单值的标识符(名称)。顾名思义,该值在脚本执行期间不会改变(魔术常量除外,它们实际上不是常量)。默认情况下,常量区分大小写。按照惯例,常量标识符总是大写的。
如果你想了解有关常量的更多信息并继续阅读文档,可以很好地解释它,并且可能有一些用法示例。
答案 1 :(得分:2)
如果你想要一个变量而不是一个函数,你可以使它成为一个匿名函数
$APP_PATH=function(){ return str_replace('//', '/', str_replace('\\', '/', dirname(__FILE__) . '/') }
或
$APP_PATH=function($file){ return str_replace('//', '/', str_replace('\\', '/', dirname($file) . '/') }
你可以用$ APP_PATH [无变量]或$ APP_PATH( FILE )调用 取决于你想做什么
答案 2 :(得分:1)
它执行一次并将结果存储在APP_PATH
中。从那时起,APP_PATH
是一个标量值。它不像是计算/函数或任何东西的句柄。
答案 3 :(得分:1)
在define
时刻,Tt作为结果存储在单个请求中。因此'恒定'。下一个请求/脚本调用将再次运行代码,因此在请求之间它可能不一致。