3

我想在我的 PHP 应用程序中使用常量作为配置变量,只有当常量不存在时(无论出于何种原因)它才会向我发出通知,但我希望这是一个错误(或异常),就像当我尝试回显一个不存在的变量时。

在不使用单独的函数来获取常量值的情况下是否可能,如下所示:

echo $non_existing_variable; // Error
echo NON_EXISTING_CONSTANT; // Now also an error

一直在寻找,但找不到任何东西。

对我来说似乎有点合乎逻辑,当我尝试使用不存在的变量时,代码执行会立即退出并引发错误,为什么不使用常量呢?

4

8 回答 8

11

我建议使用定义它你应该能够做类似的事情

if (defined('CONSTANT')) {
    echo CONSTANT;
} else {
    throw new Exception('Undefined Constant.');
}

编辑:

正如我在下面的评论中所说,使用此方法的替代方法是使用自定义错误处理程序,通过使用set_error_handler您应该能够捕捉到通知并采取行动。

于 2009-01-31T15:05:34.043 回答
2

您可能会编写自己的错误处理程序。更多信息在这里:

http://php.net/manual/en/errorfunc.examples.php

http://www.w3schools.com/php/php_error.asp

于 2009-02-01T20:12:44.347 回答
2

您可以创建一个自定义错误处理程序

  1. 检查错误是否是通知
  2. 检查错误字符串是否包含“未定义的类常量”
  3. 如果两者都如此,请抛出您的异常

这会让你得到你想要的。这种方法的问题是您现在负责处理所有错误。PHP 的错误处理将被完全绕过。

另一种方法是定义一个配置类,并使用它的常量

class Config{
    const CONFIG_ONE = 42;
}
//will produce a fatal error 
if(Config::CONFIG_TWO){
   //...
}

你会得到一个致命错误,而不是通知,这似乎更正确。不幸的是,如果没有类似的 hijink,您将无法捕获致命错误(请参阅手册的set_error_handler条目中的注释)。

最后一个选项,与我们开始的方式不同,是创建一个配置单例,其中私有类变量保存您的值。当有人试图访问未定义的配置值时,这使您可以完全编程控制会发生什么,但您确实失去了常量的好处。

于 2009-02-01T03:50:45.903 回答
1

我建议您安装一个错误处理程序,将所有错误(无论级别如何)都转换为异常。您的代码不应有任何错误,无论是警告还是通知。

请参阅:处理错误作为异常的最佳方法

于 2009-02-01T00:46:22.843 回答
0

使用该defined函数检查是否存在具有给定名称的常量。

于 2009-01-31T15:06:03.200 回答
0

是的,我知道定义的函数,但是每次检查一个常量是否存在是一项相当大的工作,所以我正在寻找某种 php 设置或技巧,而不使用额外的函数来自动抛出错误或异常,而不是常量不存在时的通知。

对我来说似乎是合乎逻辑的,当我尝试使用不存在的变量时,代码执行会立即退出并引发错误,为什么不是常量?

到目前为止感谢(-:

于 2009-01-31T15:22:03.527 回答
0

我遇到了同样的问题,我必须抓住错误的唯一方法是:

try {
   echo CONSTANT;
} catch(\Exception $e) {
   // do something else
}

if (defined('CONSTANT')) { ... 对我不起作用!

于 2020-05-04T15:07:44.643 回答
0

如果您在同一个班级中,您可以使用它来访问常量

self::CONSTANT

基本上添加 self::

如果您在另一个班级,请使用班级名称来访问它

EXAMPLE::CONSTANT
于 2020-10-03T21:27:18.060 回答