【问题标题】:Pass by reference in function for isset() & empty()在 isset() 和 empty() 函数中通过引用传递
【发布时间】:2015-07-16 02:21:24
【问题描述】:

基本上我想避免做这样的事情:

if((isset($var_1) && !empty($var_1)) || (isset($var_2) && !empty($var_2)) ...) { ....

所以我创建了一个函数来尝试解决它:

function set($item) {
    return (isset($item) && !empty($item));
}

传入未设置的变量时,例如:

$args = ['derp'];
if(set($args[0]) || $args[1]) {....

我收到一条抛出的通知,指出未设置 "Offset 1,但是当我将函数更改为通过引用记下 $item 时,它会删除 PHP 通知:

function set(&$item) {
    return (isset($item) && !empty($item));
}

Here is a demo

我的问题是 - 这是如何工作的?是因为它引用了原始的$args 数组吗?我要疯了吗?

【问题讨论】:

  • 你可以使用empty(),它测试变量是否自动设置。
  • @Barmar 我本来打算这样做,但不幸的是我陷入了 “这样做时你必须以这种方式编码,我们不会给你任何让步”
  • 您可以将多个参数传递给isset(),这可能会帮助您减少一点

标签: php pass-by-reference


【解决方案1】:

当函数采用引用参数时,在调用时会禁用有关它未定义的警告。这是因为该函数可能用于分配变量,因此传递未定义的变量或不存在的索引不是错误。例如,假设你有一个类似的函数:

function setTo3 (&$arg) {
    $arg = 3;
}

setTo3($array[1]);

没有理由警告$array[1] 未定义,因为setTo3() 从不使用参数的值。

【讨论】:

    猜你喜欢
    • 2022-01-11
    • 1970-01-01
    • 2018-04-28
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多