簡體   English   中英

PHP 5類型提示(將類型A的對象數組傳遞給函數)

[英]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_rnamesourceIdA ):

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM