【发布时间】:2021-03-21 19:30:44
【问题描述】:
对于自定义记录器,我想强制调用者传递Psr\Log\LogLevel 中定义的有效类常量。
这个类的定义如下:
namespace Psr\Log;
/**
* Describes log levels.
*/
class LogLevel
{
const EMERGENCY = 'emergency';
const ALERT = 'alert';
const CRITICAL = 'critical';
const ERROR = 'error';
const WARNING = 'warning';
const NOTICE = 'notice';
const INFO = 'info';
const DEBUG = 'debug';
}
记录器的功能(错误)如下所示:
public static function log($log, LogLevel $logLevel = null): void {
// .....
}
这不起作用,因为 LogLevel::DEBUG 例如是一个字符串而不是类的实例。有没有办法在 PHP 类型声明中强制使用类常量?因为如果我定义string 那么你显然可以传递任何字符串,但我只想允许声明的常量。
【问题讨论】:
-
尝试使用 LogLevel::$logLevel
-
@Nullable 我应该如何声明没有语法错误?
-
我认为这是不可能的;你应该用定义的 LogLevel 实例化一个 LogLevel,或者在你的 log 方法中有一个 check 方法。
-
我同意@Bobot
-
@Blackbam 这在 PHP 文档中没有描述
标签: php parameters typing class-constants