【发布时间】:2014-04-02 22:44:34
【问题描述】:
我在php中有一个函数:
function renden(array $additional_css_files = array(), $load_js = true, $load_keen = false, $allow_robots = false, $generate_csrf = true) {
}
每次都指定所有可选参数变得非常讨厌。我想使用or'd 标志(位掩码)作为单个函数参数来执行以下技巧。
define("LOAD_JS", 1);
define("NO_LOAD_JS", 0);
define("LOAD_KEEN", 1);
define("NO_LOAD_KEEN", 0);
define("ALLOW_ROBOTS", 1);
define("NO_ALLOW_ROBOTS, 0);
define("GENERATE_CSRF", 1);
define("NO_GENERATE_CSRF", 0);
function render(array("foo"), LOAD_JS | NO_LOAD_KEEN | NO_ALLOW_ROBOTS | GENERATE_CSRF) {
}
请参阅 (http://www.php.net/manual/en/function.json-encode.php) 和参数 options。如何在函数内部编写此逻辑?
【问题讨论】:
-
为什么不传递一个数组呢?
array('load_js' => true, ...)? -
位掩码是表示一堆布尔值的一种很好的密集便捷方式,并不是说(膨胀的)数组的性能影响在大多数设置中真的很重要。一个问题是为什么传递所有可选参数会很痛苦,如果它们是可选的?如果您经常只需要设置列表中较晚的其中一个,那么我可以看到。无论如何,提取值很容易..答案来了。
标签: php function logical-operators bitmask