虽然我已经自学了很多,但今天我一直在努力解决在函数中调用参数的意外行为。
这是一个示例函数:
public function example($foo = null, $bar = null) {
if ($foo) {
// Do something
}
if ($bar) {
// Do Something
}
}
现在,如果我写一个看起来如下的调用,我希望立即调用$ bar(第二个参数),事实并非如此 - 这对我来说是有意义的。
$this->example($bar);
有没有办法只调用第二个参数而不使用以下内容?
$this->example(null, $bar);
答案 0 :(得分:1)
嗯,就像Darren和他的例子所建议的那样,你可以使用函数func_get_args,但没有太大区别,所以你应该使用哪一个适合你。 使用func_get_args虽然看起来不太舒服,但是不使用直接参数的原因是什么?选择您想要用作指标的任何值(null,false,'barambam')并执行以下操作:
const ARGFALSE = 29292929299;
function foobar($f, $o, $o, $b, $a, $r){
if (!$f)// equivalent to $f != false
echo 'First arg should not be used.';
If (!$o == ARGFALSE)echo 'Second is taging along with the first';
foobar(false, ARGFALSE);
但是,在某些(或大多数)情况下,你可以向后做(另一个例子):
function getUsers($type, $limit = false) { // or your default value. It can be almost anything.
$query = 'Select from users where type = ?';
If($limit){
$query .= ' limit ?';
return $result = Db::run($query, [$type, $limit]);
}else{
return $result = Db::run($query, [$type]);
}
}