如何在PHP中不使用global将条件标志传递到类方法中


How to pass a conditional flag into a class method without using global in PHP

PHP中,我有一个Error类,用于处理应用程序中的所有错误。其方法签名为:

class Error {
    public static function show($code, $message) { ... }
}

如果DatabaseMemcachedSettings等其他类内部发生错误,则调用Error::show()。我有一个特殊情况,我希望Error::show()在执行其正常逻辑之前更新MongoDB中的记录。但是,我不想在Error::show()方法中添加像is_special_case这样的新函数参数,因为这需要向调用Error的每个类和函数传递一个标志。

我想我可以设置一个全局global $is_special_case = true,然后在Error::show()内部检查是否设置了全局,但这感觉是错误的,而且是糟糕的做法。有更好的方法来处理这个问题吗?

您也可以使用Default parameters,它总是设置为false。在这种情况下,你可以处理这个例子。

  function doSomething($isSomethingWrong = false){...}

是的,你将不得不更改你的函数定义,但你不必每次都传递它,你也可以在需要的时候传递。