我正在编写API客户端,我想通过常量为一个参数定义默认值。现在我有这样的话:
/**
* Available: val_1|val_3|val_3|val_4|val_5
*
* @var string
*/
const MY_DEFAULT_VALUE = 'val_1';
但我不确定“enum”的这种用法是否正确。我找到了如何do it with method parameters,但这不是同一个问题。我的方法的定义是:
public function callApi($someParam, $anotherParam = self::MY_DEFAULT_VALUE)
这有什么标准吗?非常感谢。
编辑:我将停止使用抽象值和参数,我将尝试在我正在解决的具体示例中解释它...我使用方法setLanguage()
调用API有可选参数$lang
。我的代码片段:
const DEFAULT_LANGUAGE = 'ENG';
// ...
public function setLanguage($lang = self::DEFAULT_LANGUAGE)
但我打电话的API只接受一些语言。基本上,我想在评论中告诉其他程序员:“好的,所以你想要更改默认语言,但请注意只有这些值是有效的。”。这并不重要,我认为我现有的解决方案也很清楚:
/**
* Available: ENG|ITA|FRA|DEU|ESP
*
* @var string
*/
const DEFAULT_LANGUAGE = 'ENG';
我只是想知道,如果对此有一些“好的做法”。
答案 0 :(得分:1)
每当我需要指定的可能值枚举时,我总是会使用单个常量来明确定义它们的所有,例如const VALUE_1 = 'val_1';
,const VALUE_2 = 'val_2';
。
至于识别默认值应该是什么,我同意你在callApi()
中设置第二个参数以设置默认值(callApi()
)的方法,但是通过使用其中一个实际常量而不是另一个“默认”常量,它只指向一个值常量。这样,您可以在基类中设置主默认值,如果子类想要选择自己的默认值,则只需覆盖该方法。
此外,这允许您在@param
的文档块中的callApi()
标记中明确提及这些各种参数选项。
最后,我建议将常量值设置为整数而不是字符串。这样,由于值本身不会提供特别的信息,因此调用者在callApi()
时更可能使用常量名称,从而使自己的代码更具可读性,并且不太可能传递意外值。