是否在 class 中设置超全局变量?

Set supergloabal variable in class or not?

在 class 中获得了一个简单函数,用于初始化消息变量,并为其设置 POST 值。因为 $_POST 无论如何都可以在 class 中的任何地方使用,所以设置它有什么意义吗?这会引起任何安全问题吗?

function set_posted_data(){
    $this->message = $_POST["message"];
}

当然最好按照你展示的方式去做,有几个原因:

  • 如果将来您将其更改为 $_GET,或者密钥 "message" 已更改,或者您以任何其他方式获取此数据,您只需在一个地方更改它
  • 你可以在这里清理它,如果你改变你想要它清理的方式,你也只能在这里改变它

除了顶层函数,我更喜欢注入。 (即 $class->function($_POST['val']) 注射更可取的原因

  • 下游越抽象,代码重用就越多
  • 您不必在每次更改变量时都仔细研究代码。你改变的只是注入点

我会做这个略有不同。遗憾的是我不知道你的 class 长什么样,所以我不得不做一些猜测。首先,我总是从一个通用函数开始:

public function setMessage($message) {
    $this->message = $message;
}

因此您仍然可以使用 class,即使没有发布消息。现在通常我会像这样设置发布值:

myclass.setMessage($_POST["message"]);

所以,我根本不会在 class 中使用超全局变量。我通常会用一些检查来包围它,所以只接受有效的消息。这是我 运行 遇到问题的地方:我不知道在这里做什么,因为我对您的代码一无所知。但是检查长度可能会有用,也许 HTML 代码是不允许的,等等。一般检查可以合并到 class,例如,没有 HTML:

public function setMessage($message) {
    $this->message = strip_tags($message);
}

我会处理所有发布的参数,并或多或少地一起进行所有特定检查。这样可以更轻松地检查代码是否安全。