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に呼び出すことができます。$elementA

f1タイプが正しいことを「伝える」方法は?

(およびにある)print_rでの使用:array1namesourceIdA

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

)
4

2 に答える 2

0

json_decode の 2 番目のパラメーターはブール値で、配列が必要な場合は「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 に答える