欢迎来到织梦企业模板-站长建站的模板站官网 !
联系我们   |   收藏网站   |   设为首页

织梦企业模板-站长建站的模板站


网站首页

关于我们

新闻中心

成功案例

产品服务

人力资源

资讯动态

企业文化
网站首页 >> 新闻中心 >> 接口的使用和实现 >> 详细内容
新闻中心
最新新闻
行业资讯
通知公告
产品服务
接口的使用和实现
发表时间:〖2025-07-18 16:37:01〗    浏览次数:〖185
关于接口的实现问题,我尽量通俗的解释下:假设你设定了某个接口InterfaceI1;里面有个需要实现的方法,如intfunc1();那么,进一步的,你写了一个类C1,去实现这个接口I1,此时就有两种实现的方法:方法1:显示实现,publicintfunc1(){.....}方法2:隐式实现,privateintfunc1(){.....}(或protectedintfunc1(){.....})发现区别了吧,如果是显示的,那么进一步,你可以通过C1.func1();来执行这个函数,即:C1myC1=newC1();myC1.func1();但是隐式就不能这样,因为private(或protected)修饰词不允许用户直接访问,但你仍然可以通过接口访问这个函数,即:I1myI1=newC1();//注意,此时myI1是接口,并通过C1实现了这个接口.myI1.func1();//通过接口访问了某个隐式实现的函数.interfaceI1{voidfunc1();}显示实现:publicclassC1:I1{voidI1.func1(){//显示实现即通过接口.函数来实现某个函数}}隐式实现:publicclassC1:I1{voidfunc1(){//隐式实现即不写出接口的名称,只要函数名称与接口定义相同即可}}接口的实现分为:隐式实现和显式实现。如果类或者结构要实现的是单个接口,可以使用隐式实现,如果类或者结构继承了多个接口那么接口中相同名称成员就要显式实现。显示实现是通过使用接口的完全限定名来实现接口成员的。在上一篇文章中《使用DbUtils实现增删改查》,发现执行runner.query()这行代码时,需要自己去处理查询到的结果集,比较麻烦。这行代码的原型是:publicObjectquery(Connectionconn,Stringsql,ResultSetHandlerTrsh,Object.params)其中ResultSet在上一篇文章中《使用DbUtils实现增删改查》,发现执行runner.query()这行代码时,需要自己去处理查询到的结果集,比较麻烦。这行代码的原型是:publicObjectquery(Connectionconn,Stringsql,ResultSetHandlerrsh,Object.params)其中ResultSetHandler是一个接口,实际上,万能的Apache已经为我们提供了众多好用的实现类,现在举例如下:publicclassRSHanlderDemo{//ScalarHandler:获取结果集中第一行数据指定列的值,常用来进行单值查询@Testpublicvoidtes9()throwsSQLException{QueryRunnerrunner=newQueryRunner(newComboPooledDataSource());Longcount=(Long)runner.query(selectcount(*)fromaccount,newScalarHandler());System.out.println(count);}//KeyedHandler(name):将结果集中的每一行数据都封装到一个Map里(List),再把这些map再存到一个map里,其key为指定的列。@Testpublicvoidtes8()throwsSQLException{QueryRunnerrunner=newQueryRunner(newComboPooledDataSource());Map>map=runner.query(select*fromaccountwheremoney>?,newKeyedHandler(id),500);System.out.println(map);}//ColumnListHandler:将结果集中某一列的数据存放到List中。@Testpublicvoidtes7()throwsSQLException{QueryRunnerrunner=newQueryRunner(newComboPooledDataSource());Listlist=runner.query(select*fromaccountwheremoney>?,newColumnListHandler(3),500);System.out.println(list);}//MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List@Testpublicvoidtes6()throwsSQLException{QueryRunnerrunner=newQueryRunner(newComboPooledDataSource());List>list=runner.query(select*fromaccountwheremoney>?,newMapListHandler(),500);System.out.println(list);}//MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。@Testpublicvoidtes5()throwsSQLException{QueryRunnerrunner=newQueryRunner(newComboPooledDataSource());Mapmap=runner.query(select*fromaccountwheremoney>?,newMapHandler(),500);System.out.println(map);}//BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。@Testpublicvoidtes4()throwsSQLException{QueryRunnerrunner=newQueryRunner(newComboPooledDataSource());Listlist=runner.query(select*fromaccountwheremoney>?,newBeanListHandler(Account.class),500);System.out.println(list);}//BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。@Testpublicvoidtes3()throwsSQLException{QueryRunnerrunner=newQueryRunner(newComboPooledDataSource());Accountacc=runner.query(select*fromaccountwheremoney>?,newBeanHandler(Account.class),500);System.out.println(acc);}//ArrayListHandler:把结果集中的每一行数据都转成一个对象数组,再存放到List中。@Testpublicvoidtes2()throwsSQLException{QueryRunnerrunner=newQueryRunner(newComboPooledDataSource());Listlist=runner.query(select*fromaccountwheremoney>?,newArrayListHandler(),500);System.out.println(list);}//ArrayHandler:把结果集中的第一行数据转成对象数组。@Testpublicvoidtest1()throwsSQLException{QueryRunnerrunner=newQueryRunner(newComboPooledDataSource());Object[]objs=runner.query(select*fromaccountwheremoney>?,newArrayHandler(),500);System.out.println(objs);}}测试时,可以加断点调试,再执行DebugasJUnitTest。总结如下:①ArrayHandler:把结果集中的第一行数据转成对象数组。②ArrayListHandler:把结果集中的每一行数据都转成一个对象数组,再存放到List中。③BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。④BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。⑤MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。⑥MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List⑦ColumnListHandler:将结果集中某一列的数据存放到List中。⑧KeyedHandler(name):将结果集中的每一行数据都封装到一个Map里(List),再把这些map再存到一个map里,其key为指定的列。⑨ScalarHandler:获取结果集中第一行数据指定列的值,常用来进行单值查询。这篇文章主要介绍了CodeIgniter开发实现支付宝接口调用的方法,结合实例形式分析了CodeIgniter开发支付宝接口的操作步骤与相关实现技巧,需要的朋友可以参考下本文实例讲述了CodeIgniter开发实现支付宝接口调用的方法。分享给大家供大家参考,具体如下:准备:1、alipay官方下载最新接口类库2、解压后,将目录"即时到账交易接口-create_direct_pay_by_userdemocreate_direct_pay_by_user-PHP-UTF-8lib"复制到applicationthird_party目录下,并改名lib为alipay3、同样复制cacert.pem文件到"applicationthird_partyalipay"目录下,这个不是必须的,在走ssl通道时用到的证书代码实例:以下只列出controller部分代码,view与model根据自己实际需要去编写<phpif(!defined('BASEPATH'))exit('Nodirectscriptaccessallowed');/***alipy支付接口*@authoronwulc@163.com**/classAlipayextendsCI_Controller{private$alipay_config;function__construct(){parent:__construct();$this->_init_config();$this->load->helper('url');}functionindex(){$this->load->view('alipay');//装载支付视图页面,post到do_alipay}functiondo_alipay(){require_once(APPPATH.'third_party/alipay/alipay_submit.class.php');//构造要请求的参数数组,无需改动$parameter=array("service"=>"create_direct_pay_by_user""partner"=>trim($this->alipay_config['partner']),"payment_type"=>'1'"notify_url"=>site_url('alipay/do_notify'),"return_url"=>site_url('alipay/do_return'),"seller_email"=>trim($this->alipay_config['seller_emaill']),//支付宝帐户,"out_trade_no"=>$this->input->post('WIDout_trade_no'),//商户订单号"subject"=>$this->input->post('WIDsubject'),//订单名称"total_fee"=>$this->input->post('WIDtotal_fee'),//必填,付款金额"body"=>$this->input->post('WIDbody'),//必填,订单描述"show_url"=>$this->input->post('WIDshow_url'),//商品展示地址"anti_phishing_key"=>''//防钓鱼时间戳"exter_invoke_ip"=>''//客户端的IP地址"_input_charset"=>trim(strtolower($this->alipay_config['input_charset'])));//建立请求$alipaySubmit=newAlipaySubmit($this->alipay_config);$html_text=$alipaySubmit->buildRequestForm($parameter,"get""确认");echo$html_text;}functiondo_notify(){require_once(APPPATH.'third_party/alipay/alipay_notify.class.php');}functiondo_return(){require_once(APPPATH.'third_party/alipay/alipay_notify.class.php');$alipayNotify=newAlipayNotify($this->alipay_config);$verify_result=$alipayNotify->verifyReturn();//商户订单号$out_trade_no=$_GET['out_trade_no'];//支付宝交易号$trade_no=$_GET['trade_no'];//交易状态$trade_status=$_GET['trade_status'];if($_GET['trade_status']=='TRADE_FINISHED'||$_GET['trade_status']=='TRADE_SUCCESS'){//判断该笔订单是否在商户网站中已经做过处理//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序//如果有做过处理,不执行商户的业务程序echo'支付成功,交易处理环节'}else{echo"trade_status="$_GET['trade_status'];}echo"验证成功<br/>"}/***初始化支付宝配置,详细参数请根据自己实际接口修改*/privatefunction_init_config(){//支付宝帐户$alipay_config['seller_emaill']=''//合作身份者id,以2088开头的16位纯数字$alipay_config['partner']='2088999999999999'//安全检验码,以数字和字母组成的32位字符$alipay_config['key']='vhyjvdht3ayxbtx692vlkbwilhXXXXXX'//签名方式不需修改$alipay_config['sign_type']=strtoupper('MD5');//字符编码格式目前支持gbk或utf-8$alipay_config['input_charset']=strtolower('utf-8');//ca证书路径地址,用于curl中ssl校验//请保证cacert.pem文件在当前文件夹目录中$alipay_config['cacert']=APPPATH.'third_party/alipay/cacert.pem'//访问模式,根据自己的服务器是否支持ssl访问,若支持请选择https;若不支持请选择http$alipay_config['transport']='http'$this->alipay_config=$alipay_config;}}
完整企业网站模板怎么写    企业网站模板怎么做网站    企业网站模板代码大全
企业网站模板代码是什么    企业网站模板免费版    企业网站首页模板下载
响应布局模板怎么做出来的    响应式布局模板免费下载网站    免费企业静态网站模板
企业网站建设模板图片    企业网站模板代码怎么写    京东小程序源码是什么
响应式布局菜鸟教程    响应布局模板图片素材高清    响应布局模板图片素材大全
响应布局模板图片素材下载    响应布局模板图片高清大图    响应布局模板图片高清版
响应布局模板图片高清下载    响应布局模板怎么做的图片    响应布局模板怎么做的好
响应式布局网页图片    企业官方网站模板素材    企业网站模板免费
企业官方网站模板    中小企业网站模板    完整企业网站模板
企业网站模板建站    响应式布局模板网页    响应式布局模板怎么做
响应布局模板图片大全    网站模版源代码    响应布局模板图片
响应布局模板怎么做    响应布局模板怎么写    响应式布局模板
关于我们
企业简介
企业文化
资质荣誉
专家团队
联系我们
新闻中心
新闻中心
行业资讯
通知公告
企业模式
服务展示
招聘职位
企业团队
合作伙伴
经营理念
关于我们
企业简介
加入我们
合作方案
团队理念
人力资源
人才招聘
岗位应聘
工作内容
工作要闻
公司纪律
团队建设
产品专区
企业安全
产品服务
响应式布局模板免费下载 企业网站首页模板 织梦模板
相关新闻
热门文章链接
合作单位网站
织梦企业模板-站长建站的模板站
织梦企业模板-站长建站的模板站 © 2003-2020   版权所有  
网站标题:接口的使用和实现-织梦企业模板-站长建站的模板站

电子营业执照