PHP在类中动态定义多个常量

时间:2018-12-15 11:04:58

标签: php

我有一个class TestClass,并且我想在其中动态定义一些常量,这些常量作为数组存储在config.php文件中的$ GLOBALS中:

$GLOBALS['config'] = [
    'const' => [
        'A' => 'abc',
        'B' => 'def',
        ...
    ]
];

是否可以(并且是一种好的做法)在类的开头使用foreach循环来定义这些常量?

class TestClass{
    foreach($GLOBALS['config']['const'] as $k => $v){
       const $k = $v;
    }

    public function doSomething(){
        return self::A;
    }
}

出于某种原因,是否有一种方法可以将所有这些常数保留在简单的config.php中,还是应该手动设置const还是应该在{{ 1}}文件?

1 个答案:

答案 0 :(得分:0)

首先且最重要的一点是避免$GLOBALS。它非常强大,可以在任何地方使用,但是它很容易出错,因为可以在任何php脚本中的任何地方修改它,因此要确保不会意外修改$GLOBALS中的键会变得很痛苦。因此,$GLOBALS尤其适合需要常量的人。现在来看常量,为什么在您已经知道值的情况下甚至需要动态创建常量。因此,如果您了解以下内容

$GLOBALS['config'] = [
    'const' => [
        'A' => 'abc',
        'B' => 'def',
        ...
    ]
];

这意味着您知道A,B等的值。因此,我建议您执行以下操作: 创建一个说constant.php的文件,并如下定义所有常量:

<?php

define('CONST_A', 'abc');
define('CONST_B', 'def');

现在在需要的地方添加此文件,请使用CONST_A直接访问该值。通过这种方式,您可以在一个地方管理所有常量。

另一种方法可以通过创建如下的Constant类:

final class Constant {
    const CONST_A = 'abc';
    const CONST_B = 'def';
    // and more
}

然后只需包含/使用Constant类并以Constant::CONST_A的形式访问常量