gpt4 book ai didi

php - 是否可以强制您的 PHP 输入变量为强类型

转载 作者:行者123 更新时间:2023-12-04 14:43:29 25 4
gpt4 key购买 nike

当我开始使用 PHP 时,我对 PHP 的松散类型以及它的易学性感到非常满意。但随着我逐渐适应它,我意识到松散类型实际上使我的脚本复杂化而不是简化它们。现在我正在寻找可以强类型化我的 PHP 变量的方法,特别是输入变量($_POST$_GET$_COOKIE$_REQUEST 和一些 $_SERVER 变量)。

此外,我希望在此过程中隐藏我的验证和清理,以便我可以“忘记”SQL 注入(inject)和许多其他容易出错的验证过程。我对我想要的样子有一个粗略的描述。

首先我声明变量。最好在 OOP 中

$varClass->post->variable_name->type('STR', 'SQL', 'EMAIL');  

// or as an array
$_MY_POST['variable_name'] = array('STR', 'SQL', 'EMIAIL');

现在我可以从预定义的 PHP GLOBAL 中删除所有未声明的变量,并使用变量类型直接在全局数组中验证和清理它们。
我还可以将未验证变量的值(如 emaill)设置为 bool false 并将未提交设置为 null,并在数据验证期间使用它们。然而,在我开始重新发明轮子之前,我希望:

有人可能会指引我去一个已经帮助解决我的问题的图书馆?
如果有任何理由我不应该追求这个疯狂的幻想?实现这一目标的更好、更清晰的方法?
以及您对这个想法可能有的其他一般想法?

最佳答案

http://sourceforge.net/p/php7framework/wiki/input/

默认包装超全局对象,但您也可以使用 $postFilter = new input($_POST) 实例化本地对象。它应该像这样手动使用:

 $_POST->email->sql["variable_name"]
$_POST->array->int["order_list"]

如果它看到任何 $_POST["raw"] 访问,它就会提示。

但您也可以预先定义过滤器列表。我会在类定义中集中这样做。这应该是旧应用程序的附加组件,您不想在其中手动检查代码并重写字符串以强制执行数据格式或类型:

 var $__rules = array(
"variable_name" => "email,sql",
"order_id" => "int,range:0:500",
"order_list" => "array,int",
);

但我个人会避免 ->sql 过早转义。如果可用,应使用 PDO 和参数化 SQL。但当然,中央转义功能总比谨慎好。

您还可以定义自定义过滤器。例如,它获取全局函数。

关于php - 是否可以强制您的 PHP 输入变量为强类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4334935/

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