2013-02-15 61 views
0

我有一個函數,它A類型的參數(在PHP 5):PHP 5類型提示(通過類型A的對象的陣列到功能)

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,但我可以propertly對$elementA的方法調用。

如何'告訴'f1該類型是否正確?

使用print_rarray1namesourceIdA):

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

) 
+0

'stdClass'不是'A'。它也沒有方法。你不會從'json_decode'中得到'A'類型的東西。在將數據傳遞給'f1'之前,您需要從數據中構建您的'A'對象。 – deceze 2013-02-15 20:46:10

回答

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.

我希望幫助的對象。

0

第二個參數來json_decode是一個布爾值,將其設置爲「真」,如果你想一個數組。

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

同時閱讀安全。非常相信你從$ _POST獲得的數據是一個壞主意。

+0

我把它設置爲true,但我的主要問題仍然是一樣的。 $ _POST數據是來自jQuery/AJAX的數據,但它是無關緊要的;-) – PolGraphic 2013-02-15 20:49:41

+0

我的標準答案是找出爲什麼數據應該工作,不 - 打印它(或將其記錄到文件中,以便您可以查看在它),所以你可以看到你到底得到了什麼。有機會,你沒有得到你的想法,當你看到它時,它會非常明顯。 – 2013-02-15 20:54:50

+0

@AlisterBulman只要好奇,在他/她的情況下相信$ _POST會有什麼危險? – meze 2013-02-15 20:57:06