如何将多个PHP类设置为调试模式?

时间:2010-02-07 15:50:26

标签: php

将10+个PHP类轻松地设置为调试模式的最佳方法是什么,但仍然保持这些类不依赖于其他东西?

如果我设置了一个全局常量,那么在每个类中检查它的值,然后每个类都依赖于这个常量设置。这意味着如果我尝试在另一个项目中使用该类,则它依赖于另一个文件中的Constant。

4 个答案:

答案 0 :(得分:4)

这个问题有点矛盾吗?如果你有10多个类,并且你想让它们依赖在其他东西上一起处于'调试'状态,那么你就不能让它们完全独立。关键是你必须依赖某些东西;我认为你最好的选择是选择最不妥协的解决方案。

我可以想到两种方法:使用define并使用环境变量。

我使用define

define('DEBUG', true);

在我的每个类文件中,在声明类之前,我会检查常量是否存在:

if(!defined('DEBUG')) define('DEBUG', $my_default_debug_value);

所以他们仍然可以独立工作,但你仍然依赖于常数。


另一种可能性是依赖于环境变量,但如果您无法控制允许哪些环境变量,则可能会在safe_mode下失败。我个人不会使用它,因为我不喜欢它们,但也许它只是你正在寻找的。

putenv('MYPROJECTNAME_DEBUG=1');

然后getenv可用于检索'MYPROJECTNAME_DEBUG'环境变量;如果找不到,那将是假的。

getenv('MYPROJECTNAME_DEBUG');

答案 1 :(得分:2)

您可以执行以下操作:

define("DEBUG", TRUE);

然后

if(defined("DEBUG"))
{
    // .... debug code
}

这会将整个脚本设置为调试模式

您可以使用类常量。 (或命名空间常量,如果你进入那个)

class MyClass{
    const Debug = true;

    public function do()
    {
          if(self::Debug == true)
          {
               // .. debug stuff
          }
    }
}

然后您只需根据状态更改常量。

这在使用命名空间时非常强大,因为我将所有“系统”特定文件(记录器,数据库连接等)保存在自己的命名空间中。如果我有所有这些类检查命名空间特定的调试常量,我可以让我正在处理的代码(非系统代码)处于调试模式。

答案 2 :(得分:0)

我使用常量 IS_PRODUCTION ,当设置为 false 时,表示我怀疑所有警告显示并输出有关失败的附加信息......每个页面都包含此常量。

P.S。我希望我能正确理解你的问题......

答案 3 :(得分:0)

根据调试模式的含义,您可能会对Assertions感兴趣。