【问题标题】:Call specific parameter in function在函数中调用特定参数
【发布时间】:2017-02-27 00:27:11
【问题描述】:

虽然我自学了很多,但今天我一直在努力解决在函数中调用参数的意外行为。

这是一个示例函数:

public function example($foo = null, $bar = null) {
    if ($foo) {
        // Do something
    }

    if ($bar) {
        // Do Something
    }
}

现在,如果我编写一个如下所示的调用,我希望立即调用 $bar(第二个参数),但事实并非如此 - 这对我来说是有道理的。

$this->example($bar);

有没有办法只调用第二个参数而不使用以下内容?

$this->example(null, $bar);

【问题讨论】:

  • 由于您将其定义为参数,因此您需要按以下顺序填写:$this->example(null, $bar);。否则$bar 将被分配为第一个参数。
  • 如果有混淆,名称是独立的,即。您可以拨打$this->example(null, $b);$this->example($a, $b);$this->example($blah);
  • 感谢达伦的回答和纠正我的语法错误。我的问题是,有时我会在开发后期增强功能,并且我试图找到一种方法来专门映射函数的参数,因此我不必编辑/检查项目中的所有调用。那是你可以在 php 中做的事情吗?
  • 主要不是。您可能必须连接到 func_get_args() 之类的东西并将一个数组传递给您的函数,例如 Example。 (但这根本不是最佳做法。我个人会避免这种做法。
  • 这是有道理的。我过去看到过这种情况,想知道为什么有人走那条路。谢谢,我也会尽量避免,但至少我知道这种方式是存在的。

标签: php


【解决方案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]);
}
}

【讨论】:

    猜你喜欢
    • 2019-01-08
    • 2020-11-25
    • 2018-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    相关资源
    最近更新 更多