假设我们有一个 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;
}
}
}
}