过去一个小时,我一直在研究此问题,以试图找出实现此目标的最佳方法。
我正在使用以下功能查找命令行宽度的PHP CLI应用程序。
function getColLen() {
$getcolLen = shell_exec('tput cols');
$colLen = (int) $getcolLen;
return $colLen;
}
现在,我现在正在使用大约8个类,并且我在大多数类和类中的许多方法中都使用了此功能。
以前,它只是包含在作曲家供应商的自动加载functions.php
文件中,而我正在每个函数中对其进行初始化,例如
public function Tagger()
{
$colwidth = getColLen();
. . . . .
等
我研究了在PHP类中使用动态全局变量的许多不同选择,其中有很多甚至有些非常复杂。
为了娱乐,我决定尝试将其保存到我的CONSTANT
文件中的functions.php
define('CLIWIDTH', getColLen());
我认为这样做不可行,因为我阅读的所有信息(以及我看到的所有示例)都是关于定义静态变量(例如字符串或目录)的。
但是令我惊讶的是,它确实很好用。一个简单的echo CLIWIDTH;
到处都会带来命令行宽度(以不同大小启动控制台时,成功测试了不同的输出)。
这不是在所有文件上创建动态变量的正确方法吗?也许我没有搜索正确的术语,但我从未听说有人在诸如此类的已定义常量内使用函数。
这是正确的代码吗?在讨论常量,全局变量等时,为什么不建议这样做吗?
答案 0 :(得分:1)
对define()
的value参数可以是什么没有限制,并且常量将定义为具有该表达式的内容。尽管它通常仅用于给文字命名,例如数据库配置设置,但并非必须如此。您可以在其中放置动态表达式,例如
define("DB_USER", $hostname == "dev" ? "devuser" : "produser");
答案 1 :(得分:0)
这是有效的PHP,但与每次调用该函数都不相同(除非该函数始终返回相同的结果)。基本上,在遇到define
时会调用该函数,并将该返回值分配给该常量。考虑:
function getv() {
static $v = 4;
return $v++;
}
define('V', getv());
echo V . PHP_EOL;
echo getv() . PHP_EOL;
echo V . PHP_EOL;
输出:
4
5
4
请注意,即使V
的返回值更改为5,常量getv
始终输出4。