繁体   English   中英

如何将另一个文件中的变量分配给类常量?

[英]How to assign a variable from another file to a class constant?

我有一组在我的代码库中恒定的API密钥-我有一个开发密钥和一个活动密钥。 它们存储在自己的“ keys.php”文件中。

我有一个处理访问API的类,并且将键作为类常量存储在该类中。

我希望能够将开发键换成实时键,并在我的类的静态方法中访问它们。

当我像这样分配类常量时,这可以正常工作:

const API_USER_NAME = 'user_name';

但是要将密钥存储在自己的文件中,并将其包括在类文件中,并按如下方式定义这些常量:

const API_USER_NAME = $user_name;

但是显然,我不能将变量分配给常量,即使该变量在程序执行期间不会更改值。

有没有其他方法可以使用变量分配给常量? 还是至少将它们的密钥保留在它们的集中式文件中,但仍在类的静态方法中访问它们?

您可以使用.env解决此问题。

https://github.com/vlucas/phpdotenv

为了获得所需的结果,可以在项目内的受保护文件夹中定义一个.env文件,并将gitignore设置为不暂存.env。 然后在生产环境中,可以使用保护定义的常量设置.env。 .env的使用有很多框架,Laravel是一个很好的例子。

您可以简单地将自己的键定义为常量:

keys.php

const KEY_USER_NAME = 'user_name';
const KEY_USER_AGE = 'user_age';
// ...

require $path_to_somewhere . '/keys.php';

class YourClass 
{
  const API_USER_NAME = KEY_USER_NAME;
  const API_USER_AGE = KEY_USER_AGE;

  // ...
}

您不能将变量分配给类常量,因为如文档所述

该值必须是一个常量表达式,而不是(例如)变量,属性或函数调用。

变量求值发生在运行时,而类常量求值发生在编译时。 设置类常量时,这些变量尚未准备就绪。

IMO,看来您的设计确实是错误的。

如果这些常量属于该类,则应在此处定义它们,而不是在其他地方定义。 并且不要多次定义(就像使用外部值初始化类常量时所做的那样)。

因此,要么直接在类中定义它们,要么在另一个文件中使用const在其他文件中定义它们,并将这些常量设置为可全局访问。

constants.php

const FOO = 'BAR';

using_file.php

require_once('constants.php');
var_dump(defined('FOO'));
// outputs bool(true)

如果您倾向于使用变量来定义这些常量,即使在其他地方进行定义,也可以使用define() 因为它是在运行时求值的,所以它适用于变量表达式。 但是您不能在类定义中使用它们

moreconstants.php

$bar = 'baz';
define('FOO', $bar);

echo FOO;
// outputs 'baz';

奇怪的是,无论原始常量如何定义,使用define()常量可以用于使用const初始化类常量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM