PHP 5类型提示(将类型A的对象数组传递给函数)

时间:2013-02-15 20:42:50

标签: php casting type-hinting

我有一个带有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 namesourceId位于A):

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

)

2 个答案:

答案 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类对象。

我希望有所帮助。