当前位置: 首页 > 后端技术 > PHP

关于强类型和弱类型语言访问对象(数据)的问题

时间:2023-03-29 14:28:31 PHP

在旧的业务流程上加一个“拦截”,把原来从前端表单提交到后台的处理逻辑延迟了,本质上是一个异步过程。此时,表单参数存储在数据库中,在适当的时候“拦截”结束时调用原来的处理逻辑。F代表表单参数,A代表控制器参数,F-->A-->F'-->A';思考上面的过程,①F-->A,从前端到controller方法②A-->F',将参数存入数据库③F'-->A',从数据库中取出原始参数对象,希望A'能够完整的表达A,A'==A,包括参数类型和顺序。数据库数据表的设计表at_form{idbigint,namevarcharjsonvarchartype_tokenvarchar?}Java的示例代码publicclassAtFormApp{publicstaticvoidmain(String[]args)throwsIOException,ClassNotFoundException{p.name="亲爱的";p.age=26;控制方法1(p);控制方法2();}staticclassPerson{字符串名称;年龄;}staticvoidcontrolMethod1(Personp)throwsIOException{saveService(p,"p");}staticvoidcontrolMethod2()throwsIOException,ClassNotFoundException{AtFormatForm=query();ObjectInputStreamois=newObjectInputStream(newByteArrayInputStream(atForm.typeToken.getBytes()));类型type=(Type)ois.readObject();//在这里输入PersonPersonp=newGson().fromJson(atForm.json,type.getClass());真实服务(p);}staticvoidsaveService(Personp,Stringname)throwsIOException{Typetype=newTypeToken(){}.getType();Stringjson=newGson().toJson(p);ByteArrayOutputStreambaos=newByteArrayOutputStream();ObjectOutputStreamoos=newObjectOutputStream(baos);oos.writeObject(类型);oos.close();StringtypeToken=baos.toString();AtFormatForm=newAtForm();atForm.name=名称;atForm.json=json;atForm.typeToken=typeToken;插入(在窗体);}staticvoidrealService(Personp){//好}静态AtForm查询()抛出IOException{AtFormatForm=newAtForm();atForm.name="p";atForm.json="{\"name\":\"Honey\",\"age\":26}";类型type=newTypeToken(){}.getType();ByteArrayOutputStreambaos=newByteArrayOutputStream();ObjectOutputStreamoos=newObjectOutputStream(baos);oos.writeObject(类型);oos.close();StringtypeToken=baos.toString();atForm.typeToken=typeToken;返回表单;}//模仿插入行为staticintinsert(AtFormatForm){return1;}staticclassAtForm{Longid;字符串类型令牌;字符串名称;字符串json;}}其实在异步处理的时候很难做到。无法确定此处Person的类型。调用realService方法也做不到,需要反省?PHP示例代码name='亲爱的';$p->年龄=26;$this->controlMethod1($p);$this->controlMethod2();}publicfunctioncontrolMethod1(Person$p){$this->saveService($p,'p');}publicfunctioncontrolMethod2(){$atForm=AtForm::findOne(['name'=>'p']);$p=unserialize($atForm->data);$this->realService($p);}publicfunctionsaveService(Person$p,$name){$atForm=newAtForm();$atForm->name=$name;$atForm->data=serialize($p);$atForm.save();}publicfunctionrealService(Person$p){//好}}classPerson{public$name;public$age;}classAtForm(){public$id;公共$名称;公共$数据;publicstaticfindOne($condition){}publicsave(){}}弱类型语言没有这个烦恼,$p=unserialize($atForm->数据);要得到原来的Person实例对象,后面调用realService($p)也是理所当然的。虽然这里讨论的例子只有一个参数,但是PHP也可以支持多个参数。感谢@Tranch提供PHP示例代码