मैं एमए इसे हल करने के लिए एक विधि है। मेरा दृष्टिकोण है:
1 - एक सारणी वर्ग बनाएं जिसमें रेगेक्स का उपयोग करके ऑब्जेक्ट्स को ऐरे (निजी अटारी समेत) रूपांतरित करने का तरीका हो। 2 - लौटा सरणी को जेसन में कनवर्ट करें।
मैं अपने सभी डोमेन कक्षाओं के अभिभावक के रूप में इस सार वर्ग का उपयोग
कक्षा कोड:
namespace Project\core;
abstract class AbstractEntity {
public function getAvoidedFields() {
return array();
}
public function toArray() {
$temp = (array) $this;
$array = array();
foreach ($temp as $k => $v) {
$k = preg_match ('/^\x00(?:.*?)\x00(.+)/', $k, $matches) ? $matches [1] : $k;
if (in_array ($k, $this->getAvoidedFields())) {
$array [$k] = "";
} else {
// if it is an object recursive call
if (is_object ($v) && $v instanceof AbstractEntity) {
$array [$k] = $v->toArray();
}
// if its an array pass por each item
if (is_array ($v)) {
foreach ($v as $key => $value) {
if (is_object ($value) && $value instanceof AbstractEntity) {
$arrayReturn [$key] = $value->toArray();
} else {
$arrayReturn [$key] = $value;
}
}
$array [$k] = $arrayReturn;
}
// if it is not a array and a object return it
if (! is_object ($v) && !is_array ($v)) {
$array [$k] = $v;
}
}
}
return $array;
}
}
एक समस्या मैं है अब के साथ काम कर रहा हूँ - json_decode() का उपयोग कर, मैं एक stdClass वस्तु मिलता है, मेरी मूल वस्तु नहीं। मैं धारावाहिक/unserialize का उपयोग कर सकते हैं, लेकिन मेरी वस्तुओं समय के साथ संरचना बदलती है भले ही थोड़ा, serialize serialize rendering। – Dennis
@ डेनिस 'unserialize' हमेशा 'stdClass' का एक उदाहरण वापस कर देगा, यह इसे अनुपयोगी नहीं बनाता है। आप आसानी से '$ attrs = unserialize ($ json) जैसे कुछ का समर्थन करने के लिए आपको एपीआई डिज़ाइन कर सकते हैं; $ व्यक्ति = नया व्यक्ति ($ attrs); 'आपका 'व्यक्ति' कन्स्ट्रक्टर तदनुसार गुण असाइन कर सकता है। –