我有一个带有A
类型参数的函数(在PHP 5中):
function f1(A a){...}
我还有一个数组,我从$_POST['val']
值解码并将其发送到其他函数f2
:
$array1 = json_decode(stripslashes($_POST['val']));
f2($array1);
现在我想在f1
内的每个数组元素上调用f2
:
function f2(array $a){
foreach($a as $element){
f1($element);
}
但是我收到了一个错误:
Argument 1 passed to f1() must be an instance of A, instance of stdClass given
当我将if($element instanceof A)
置于f2
内时,我得到FALSE
,但我可以在$element
A
方法中调用{/ 1}}。
如何'告诉'f1
该类型是对的?
在print_r
上使用array1
name
和sourceId
位于A
):
Array
(
[0] => Array
(
[name] => connect
[sourceId] => 12
)
)
答案 0 :(得分:0)
json_decode的第二个参数是布尔值,如果你想要一个数组,将它设置为'true'。
$array1 = json_decode(stripslashes($_POST['val']), true);
还阅读安全性。盲目相信你从$ _POST获得的数据是一个坏主意。
答案 1 :(得分:0)
json_decode的输出是stdClass类型的对象,因此获得该错误是正常的。在PHP中从一种对象类型转换到另一种对象类型并不容易,但你可以使用这个技巧:
function f2(array $a){
foreach($a as $element){
f1 ( unserialize ( preg_replace ( "/O:\d+:\"\w+\":(.*)/", "O:1:\"A\":$1", serialize ($element) ) ) )
}
这个脏技巧实际上将stdClass强制转换为A类对象。
我希望有所帮助。