将10+个PHP类轻松地设置为调试模式的最佳方法是什么,但仍然保持这些类不依赖于其他东西?
如果我设置了一个全局常量,那么在每个类中检查它的值,然后每个类都依赖于这个常量设置。这意味着如果我尝试在另一个项目中使用该类,则它依赖于另一个文件中的Constant。
答案 0 :(得分:4)
这个问题有点矛盾吗?如果你有10多个类,并且你想让它们依赖在其他东西上一起处于'调试'状态,那么你就不能让它们完全独立。关键是你必须依赖某些东西;我认为你最好的选择是选择最不妥协的解决方案。
我可以想到两种方法:使用define
并使用环境变量。
我使用define
:
define('DEBUG', true);
在我的每个类文件中,在声明类之前,我会检查常量是否存在:
if(!defined('DEBUG')) define('DEBUG', $my_default_debug_value);
所以他们仍然可以独立工作,但你仍然依赖于常数。
另一种可能性是依赖于环境变量,但如果您无法控制允许哪些环境变量,则可能会在safe_mode
下失败。我个人不会使用它,因为我不喜欢它们,但也许它只是你正在寻找的。 p>
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感兴趣。