Non, vous ne pouvez pas lancer un Object
dans un Class
, mais comme un Class
est un Object
vous pouvez le faire dans l'autre sens, mais rappelez-vous que l'accès membre d'un Class
est plus rapide que l'accès membre d'un Object
.
Pour transformer un Object
en Class
vous devrez instancier le Class
puis copiez chaque champ Object
dans cette Class
. Mais attention ils ne seront pas la même instance c'est une copie.
Pour faire l'inverse, vous devrez utiliser describeType sur le Class
d'énumérer tout le domaine public de ce Class
, puis copier la valeur dans une nouvelle Object
.
// simple sample:
class A {
public var testA:int;
public var testB:int;
}
function Object2A(o:Object):A {
var ret:A = new A();
for (var fieldName:String in o) {
if (ret.hasOwnProperty(fieldName)) {
ret[fieldName] = o[fieldName];
}
}
return ret;
}
import flash.utils.describeType;
function A2Object(a:A):Object {
var ret:Object = {};
var fields:XMLList=describeType(a).variable;
for each(var field:XML in fields) {
var fieldName:[email protected]();
ret[fieldName]=a[fieldName];
}
return ret;
}
var o:Object = {testA:12, testB:13};
var a:A = Object2A(o); // copy from object into class
o=A2Object(a); // copy from class into object
Depuis, j'utilise AMFPHP Je pense que la réflexion est la voie à suivre. Bien que je ne comprends pas encore complètement :) –