[英]How to create static class constant variable from another constant variable?
[英]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是一个很好的例子。
您可以简单地将自己的键定义为常量:
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.