我在PHP中有一个简单的wee清理功能
它接受一个值或一组值,并进行一些输入清理.现在,我正在使用mysqli,它将行作为对象来获取,因此我需要能够将其应用于对象和数组
function filter_out($output=''){
if($output != ''){
// i.e passed $_POST array
if(is_array($output)){
$newoutput = array();
foreach($output as $outputname=>$outputval){
$newoutput[$outputname] = stripslashes($outputval);
$newoutput[$outputname] = htmlspecialchars($newoutput[$outputname]);
}
} else if(is_object($input)){
?
}
}
}
谁能告诉我如何用对象作为输入来做等效的事情?
解决方法:
$vars = get_object_vars($input);
foreach ($vars as $outputname => $outputval) {
///...
}
不要尝试对对象本身进行迭代(foreach($object为$key => gt; $value)),因为它并不总是可以正常工作.有时会(以stdClass为例),有时不会(任何实现Traversable的类…
编辑
就您的评论而言…只要这些类没有做任何有趣的事情(__get或__set,protected或private),您就可以这样做:
$newoutput = clone $input; //make a copy to return
$vars = get_object_vars($input);
foreach ($vars as $outputname => $outputval) {
$newoutput->$outputname = htmlspecialchars(stripslashes($outputval));
}
但是我真的想不出任何一种方法可以100%地起作用……另一种选择是返回一个nieve对象(stdclass)而不是提交的对象:
$newoutput = new StdClass();
$vars = get_object_vars($input);
foreach ($vars as $outputname => $outputval) {
$newoutput->$outputname = htmlspecialchars(stripslashes($outputval));
}
标签:input,arrays,php,object
来源: https://codeday.me/bug/20191208/2095026.html