gpt4 book ai didi

php - 将 $_POST/$_GET 作为参数传递给函数

转载 作者:行者123 更新时间:2023-12-02 00:58:01 25 4
gpt4 key购买 nike

我遇到了一段有趣的 PHP 代码,这让我有点困惑,为什么作者选择这样做。

function do_something($db, $post_vars){
foreach($post_vars as $key => $value{
$vars[$key] = mysqli_real_escape_string($db, $value);
}
return $vars;
}

$db = mysqli_connect("myhost","myuser","mypassw","mybd") or die("Error " . mysqli_error($link));
do_something($db, $_POST);

这让我开始思考为什么有人想要将 $_POST 作为变量传递而不是直接在函数内部访问它?我能想到的唯一好处(这有点远)是如果我们在调用函数之前将其他信息附加到 $_POST(例如):

function do_something($db, $post_vars){
foreach($post_vars as $key => $value{
$vars[$key] = mysqli_real_escape_string($db, $value);
}
return $vars;
}

$db = mysqli_connect("myhost","myuser","mypassw","mybd") or die("Error " . mysqli_error($link));

foreach($_POST as $post_key => $post_value){
$post[$post_key] = $post_value;
}

$post['my_custom_var'] = "a";

do_something($db, $post);

但是,在代码中的任何地方都没有这种做法的证据。只需调用 do_something() 并将 $_POST 作为参数传递。

那么我的问题是,这样做是否有任何我错过的好处,或者作者根本不明白 $_POST 是一个全局变量?

一个完整的远景:他们是否可以对此做出任何善意的“后期添加”(例如我的示例)来几乎证明这种做法或者这只是一个误会。或者是否存在可以证明这种做法合理的安全隐患?

最佳答案

恕我直言,这是一种抽象实践,有以下好处:

  1. 一般性:通过接收 $_POST 作为参数,该函数与 $_POST 的耦合度降低。该功能可能会服务于更多场景并且可能具有更高的可重用性。

  2. 控制反转:因为函数的依赖($_POST)是从外部注入(inject)的,所以你对函数有更多的控制权。这不太可能,但假设您的表单已更新,现在您需要通过 GET 方法提交。在不修改函数体的情况下,在调用方传入 $_GET 就足以反射(reflect)更改。

  3. 测试夹具隔离:为了模拟 FORM 输入以测试函数中的特定代码路径,最好以抽象的方式访问全局状态(例如 $_POST),以便测试本身不会给系统的其他部分带来副作用。

关于php - 将 $_POST/$_GET 作为参数传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32316383/

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