0

PHP クラスの 請求書 と アイテム があるとしましょう:

class Item{
    public $CID;
    public $CATID;             // category id...
    public $net;
    public $t1;
    public $t2;
    public $total;
}

class invoice{
    public $items = array();        //array of object item;
    public $date;
    public $title;
    public $description;
    public $subtotal;
    public $t1;
    public $t2;
    public $total;


    public function __construct(){
    }
}

オブジェクト請求書には、アイテムの追加、アイテムの削除、再計算、税金の設定などのいくつかのメソッドが含まれています...ちょっと複雑です。次を使用して、このオブジェクトのインスタンスをJavaScriptに解析する方法を見つけました。

$json=json_encode((array)$invoice);

次に、JavaScriptで、まったく同じオブジェクト定義、同じメソッドを使用して、次を使用します。

test = jQuery.parseJSON('<?php= $json?>');
test.__proto__ = invoice.prototype;

これまでのところ、私のテスト変数は JavaScript の送り状オブジェクトになり、送り状および項目の JavaScript クラスで定義されたメソッドを使用できるようになりました。いくつかの操作の後、次を使用して、オブジェクトをphpに再送信できます(たとえば、ajaxで):

function send_ajax(){
    $.ajax({
        url: "ajax.php",
        type: "POST",
        data: ({
             invoice:JSON.stringify(test)
        }),
        success: function(msg){
            $('#response').html(msg);
        }
    });
}

次に、サーバー側で json_decode を使用して json を配列に変換します。これは私が立ち往生しているところです!$invoice[] または stdObjcect を請求書クラスにキャストできません。私も ASP .net C# でコーディングしていますが、そのようなことは本当に簡単に実現できます。私がそのようなことを達成する必要がある理由は単純です: PHP 請求書クラスから解析された JSON へのメソッドを使用する必要があります...誰かアイデアがありますか?

以前に思いついたのは、jsonオブジェクトを手動で解析することだけです...他に「組み込み」の方法はありますか

  public function __construct($json = null){
        if ($json != null){
           $json=json_decode($json, true);

           for($i=0;$i<count($json[items]);$i++){
               $newItem= new Item();
                foreach ($json[items][$i] as $key=>$value){
                    $newItem->$key=$value;
                }
               array_push($this->items,$newItem);
           }
            foreach($json as $key =>$value){
                if(!is_array($value)){
                $this->$key=$value;
                }
            }
        }
    }
4

1 に答える 1

0

ASP が何をするのかはわかりませんが、異なる言語間である種のシリアル化を作成しようとすることは、最善の解決策ではありません。

JavaScript と PHP が相互に通信するプロトコルを定義する必要があります。JS 側と PHP 側が特定の値を独自のオブジェクト構造にロードする場所。

PHP クラスには、特定の配列構造と、どのフィールドをどのインスタンス変数に入れるかを認識するメソッドがある場合があります。

public function loadJSON(array $data) {
    $this->title = $data['Title'];
    ...
}
于 2013-03-24T18:13:52.907 に答える