【问题标题】:PHP dinamically define multiple constants inside a class [closed]PHP在一个类中动态定义多个常量[关闭]
【发布时间】:2018-12-15 11:04:58
【问题描述】:

我有一个class TestClass,在其中我希望能够动态地定义一些存储在 $GLOBALS 中的常量作为config.php 文件中的一个数组:

$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 还是应该在config.php 文件中设置define

【问题讨论】:

  • 嘿@splash58 那不是我想知道的,我想知道在类中使用 foreach 来定义一些常量是否是一个好习惯(并且数组在另一个文件中。 ..)
  • 你的 foreach 现在 - 语法错误
  • @splash58 好的,假设我将它添加到一个函数中,这是一个好习惯还是我应该采用const 的方式并忘记 config.php 文件还是应该使用 @ 987654331@ 在配置中?
  • 只需在config.php中使用define,因为它总是添加到每个页面中

标签: php


【解决方案1】:

首先也是最重要的记笔记是避免$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 直接访问该值。通过这种方式,您所有的常量都在一个地方进行管理。

另一种方法是创建一个常量类,如下所示:

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

然后简单地包含/使用Constant 类并以Constant::CONST_A 访问常量

【讨论】:

  • 好的,谢谢!我正在使用define 做这件事,即使我讨厌看到连续 10 个定义 X_X
  • :D 但是所有这些都将在一个文件中,您将不得不很少看到该文件;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-17
  • 1970-01-01
  • 2012-02-19
  • 2010-10-03
  • 2021-06-05
  • 2011-08-19
  • 1970-01-01
相关资源
最近更新 更多