首页 > 解决方案 > 通过 PHP 中的函数动态(Shell Exec)定义常量

问题描述

在过去的一个小时里,我只是在研究这个,试图找出最好的方法。

我正在开发一个 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;任何地方都会带来命令行宽度(在以不同大小启动控制台时针对不同输出进行了成功测试)。

这不是被广泛认为是在所有文件中创建动态变量的正确方法吗?也许我没有搜索正确的术语,但我从未听说过有人在诸如此类的已定义常量内使用函数。

这是正确的代码吗?在讨论常量、全局变量等时,是否有理由不推荐这样做?

标签: phpclassoopcommand-line-interfaceconstants

解决方案


对于 value 参数可以是什么没有限制define(),并且常量将被定义为具有该表达式的任何内容。虽然它主要用于为文字命名,例如数据库配置设置,但它并非必须如此。您可以在那里放置一个动态表达式,例如

define("DB_USER", $hostname == "dev" ? "devuser" : "produser");

推荐阅读