提问人:tim 提问时间:9/11/2022 更新时间:9/11/2022 访问量:60
POST 值可以成为 PHP 中某物的实例吗?
Can a POST value ever be an instanceof something in PHP?
问:
我遇到过带有检查的PHP代码,该检查测试POST值是否为a类:instanceof
if ($_POST['something'] instanceof SomeClass) {
// do something
}
这对我来说似乎很奇怪,因为我不认为检查可能是真的。POST 值毕竟是一个字符串,而字符串不是类的实例。
我尝试传递实例的序列化版本(),但这不起作用(这是有道理的,因为它仍然是一个字符串,而不是一个对象)。O:9:"SomeClass":0:{}
我认为这个检查永远不可能是真的,这是对的吗?还是我在这里遗漏了什么?
答:
0赞
user1986815
9/11/2022
#1
我认为这不是一个简单的问题。我认为理论上是“是的”。
由于 $_POST 是一个变量数组,并且对数组的元素没有限制,例如,您可以创建一个对象数组。
$array[] = new stdClass;
$array[0]->variable = value;
etc ...
您会看到代码作者正在检查 $_POST['something'](它是数组的一个元素,并且很容易成为对象)是否是类的实例。
现在我还没有测试过它,但从理论上讲,人们可以将一个类的对象放在一个数组中,并通过 $_POST 很好地编码来发送它。
评论
2赞
ADyson
9/11/2022
是的,但 php 会将其解码为数组,而不是类
3赞
ADyson
9/11/2022
唯一可能使 OP 的代码成为必要的是,如果接收请求的某些代码在脚本中的这一点之前直接干扰了 $_POST 数组
0赞
9/11/2022
@ADyson只是为了逗你一点:或者$object = (object) $array;
$object = json_decode(json_encode($array), FALSE);
;-)
1赞
tim
9/11/2022
感谢您的回答!但就这个问题而言,默认变量是由 PHP 填充的;它不会通过自定义PHP代码在服务器上以任何方式进行操作。当然,如果我们假设操纵,则通过检查是微不足道的(例如)。$_POST
$_POST
$_POST['something'] = unserialize($_POST['something'])
0赞
ADyson
9/11/2022
@MaxMuster是的,但我们谈论的是将 HTTP 请求中的数据自动解码为 _POST 美元,这是 php 默认执行的,而不是一些自定义代码。
上一个:PHP错误或只是一个逻辑缺陷
评论
$_POST