gpt4 book ai didi

php - 使用对不存在值的引用将变量设置为 NULL?

转载 作者:可可西里 更新时间:2023-11-01 00:37:18 26 4
gpt4 key购买 nike

当通过引用传递一个不存在的值时,PHP 会创建该值并将其设置为 NULL。当检查某些函数中的空值时发生内存增加时,我注意到了这一点。采取以下功能:

function v(&$v,$d=NULL){return isset($v)?$v:$d;}
$bar = v($foo, $default);

这将是以下内容的简写:

if(isset($foo))
{
$bar = $foo;
}
else
{
$bar = $default;
}

但是,当传递不存在的变量时,PHP 会创建它们。对于变量——一旦方法/函数结束,它们就会被删除——但对于检查 super 全局数组,如 $_GET 或 $_POST,数组元素永远不会被删除,从而导致额外的内存使用。

$request_with = v($_SERVER['HTTP_X_REQUESTED_WITH']);

谁能解释为什么会发生这种情况,是否是 PHP 待办事项修复或其他疯狂使用值的功能?

最佳答案

XeonCross 的函数 v 是常用的简写:

$val= isset($arr['elm']) ? $arr['elm'] : 'default'

避免可怕的“未定义索引:榆树”通知。一个不错的辅助函数是:

function ifset(&$v1, $v2 = null) {
return isset($v1) ? $v1 : $v2;
}

正如 Xeoncross 所建议的,所以你可以写得更好

$val = ifset($arr['elm'],'default') 

然而,这在我们称为 PHP 的心爱“语言”中有很多有趣的(?)怪癖:

在函数 ifset 中,$v1 似乎是 UNSET,因此它正确返回值 $v2,您可能会得出结论 ifset 工作正常。但之后 $arr['elm'] 被默默地设置为 NULL。因此请考虑以下事项:

    function wtf(&$v) {
if (isset($v))
echo "It is set";
else
echo "It is NOT set";
}
$p=[];
wtf($p['notexist']); => It is NOT set
$p; => [ 'notexist' => NULL ]

但这是另一个错觉,因为 isset() 函数对于 NULL 值也会返回 false:

$x=NULL;
isset($x) => false... huh??

我们是否预料到了这一点?嗯..它在文档中,所以这也是设计使然。欢迎来到 php 的精彩世界。

关于php - 使用对不存在值的引用将变量设置为 NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4380162/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com