通过PHP中的函数动态(Shell Exec)定义的常量

时间:2019-05-02 03:15:11

标签: php class oop command-line-interface constants

过去一个小时,我一直在研究此问题,以试图找出实现此目标的最佳方法。

我正在使用以下功能查找命令行宽度的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;到处都会带来命令行宽度(以不同大小启动控制台时,成功测试了不同的输出)。

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

这是正确的代码吗?在讨论常量,全局变量等时,为什么不建议这样做吗?

2 个答案:

答案 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。

Demo on 3v4l.org