0

我有一个接受类型参数的函数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,但我可以正确地调用's 方法。$elementA

如何“判断”f1类型是正确的?

print_rarray1(namesourceId在) 上使用A

Array
(
[0] => Array
    (
        [name] => connect
        [sourceId] => 12
    )

)
4

2 回答 2

0

json_decode 的第二个参数是一个布尔值,如果需要数组,请将其设置为“true”。

$array1 =  json_decode(stripslashes($_POST['val']), true);

还要阅读安全性。轻信从 $_POST 获得的数据是个坏主意。

于 2013-02-15T20:46:32.347 回答
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 类型的对象。

我希望这会有所帮助。

于 2013-02-15T22:03:58.233 回答