繁体   English   中英

如何在PHP 5.6版中使用全局常量而不是类常量

[英]How to use a global constant instead of a class constant in PHP version 5.6

我正在使用Monolog创建应用程序的日志记录系统。 在核心应用程序文件中,创建新的Monolog对象后,需要选择要在日志文件中打印的日志级别。 我想使用一个全局常量LOG_LEVEL ,它可以是'DEBUG','INFO'等。我需要Monolog类将其值视为类常量。

// content of config.php
// Here I declare the constants in a separate file called 'config.php'
define("LOG_FILE", "patch/to/my/log.log");
define("LOG_LEVEL", "ERROR");

// content of app.php
require 'config.php';
require 'vendor/autoload.php';

$container['logger'] = function($c) {
    $logger = new \Monolog\Logger('logger');
    error_log('log level ' . LOG_LEVEL); // prints 'log level ERROR'

    $fileHandler = new \Monolog\Handler\StreamHandler(LOG_FILE, $logger::LOG_LEVEL); // here I get the error 'Undefined class constant LOG_LEVEL'
    //the normal syntax would be '$logger::ERROR' in this case and that works fine

    $logger->pushHandler($fileHandler);
    return $logger;
};

我需要'LOG_LEVEL'常量由monolog类用作'ERROR',而不是'LOG_LEVEL'。 我在这里做错什么了,已经找了好几个小时没有任何运气了。

现在,您正在执行$logger::LOG_LEVEL ,这将从$logger所在的类(在本例中为\\Monolog\\Logger )中删除“ LOG_LEVEL”。 那没有名为LOG_LEVEL的静态变量,因此得到未定义。
您只需在任何类中都定义了'LOG_LEVEL',所以:

 $fileHandler = new \Monolog\Handler\StreamHandler(LOG_FILE, LOG_LEVEL); 

花式的解决方案:

您可以做一个静态类,并将其包含在您的主页中:

Class CONFIG {
    public static $LOG_LEVEL = 'default Value';
}

// Then you can use this anywhere:
CONFIG::$LOG_LEVEL
$fileHandler = new \Monolog\Handler\StreamHandler(LOG_FILE, CONFIG::$LOG_LEVEL); 

这样做的好处是配置文件只有一个,不会分散在所有类型的文件中,很快就会变得很烦人。

您也可以像下面这样使用Logger::getLevels()

$log_level = $logger->getLevels()[LOG_LEVEL];
$fileHandler = new ...StreamHandler(LOG_FILE, $log_level);

制作一个静态类并包含该类...

class GLOBALCONF{
    public static $VALUE= 'Something in here';
}

// Use it where you want
GLOBALCONF::$VALUE

您正在使它变得比所需的复杂。 Monolog 具有将错误级别(如字符串)转换为其自己的内部值的功能。 只需将代码更改为此:

$fileHandler = new \Monolog\Handler\StreamHandler(LOG_FILE, $logger::toMonologLevel(LOG_LEVEL));

暂无
暂无

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

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