[英]PHP 5 type hinting (passing array of objects of type A to the function)
我有一個函數接受類型A
參數(在PHP 5中):
function f1(A a){...}
我也有一個數組,可以從$_POST['val']
值解碼並將其發送到其他函數f2
:
$array1 = json_decode(stripslashes($_POST['val']));
f2($array1);
現在我想在f2
內部的每個數組元素上調用f1
:
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
,但是我可以適當地調用A
的$element
方法。
如何“告訴” f1
類型正確?
在array1
上使用print_r
( name
和sourceId
在A
):
Array
(
[0] => Array
(
[name] => connect
[sourceId] => 12
)
)
json_decode的第二個參數是布爾值,如果需要數組,請將其設置為“ true”。
$array1 = json_decode(stripslashes($_POST['val']), true);
另請閱讀安全性。 完全信任從$ _POST獲得的數據是一個壞主意。
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的對象。
希望對您有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.