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;
}
}
}
}