PHP钩子与简单分发方式实例分析
本文实例讲述了PHP钩子与简单分发方式。分享给大家供大家参考,具体如下:
//简单的钩子实现例子 classtool{ publicstaticfunctionmain($class,$fun,$data=''){ //前置公共操作 $con=new$class; $con->$fun($data); //后置公共操作 } } classa{ functionb($data){ echo'我是方法b'; } } classc{ functiond($data){ echo'我是方法d'; } } //钩子调用 tool::main('a','b','222');
在封装短信通道的时候本打算用钩子来实现的,
可以自动发送短信(多通道)email,push等消息。。。
后来发现业务需求并没有想象中那么复杂,开发就搁置了。。。。
T_T于是就采用了一种简单的分发方式来实现
classAr_Sms{ constLANCHUANG=1;//通道1 constALIDAYU=2;//通道2 private$type; private$chuanglan_config=array(//通道1配置项 'api_send_url'=>'xxxx', 'api_balance_query_url'=>'xxxxx', 'api_account'=>'xxxx', 'api_password'=>'xxxxx', ); private$alidayu_config=array(//通道2配置项 'api_key'=>'xxxx', 'api_id'=>'xxxxx', 'api_send_url'=>'xxxxx', ); publicfunction__construct($type=1){ switch($type){ caseself::LANCHUANG: $this->type=$type;break; caseself::ALIDAYU: $this->type=$type;break; default: $this->type=false; } } //对外抛出的发送方法 publicfunctionsendSms($mobile,$msg){ switch($this->type){ caseself::LANCHUANG: return$this->_sendCL($mobile,$msg); caseself::ALIDAYU: return$this->_sendAL($mobile,$msg); default: returnfalse; } } //通道1发送方法 privatefunction_sendCL($mobile,$msg,$needstatus='false',$extno=''){ $postArr=array( 'account'=>$this->chuanglan_config['api_account'], 'pswd'=>$this->chuanglan_config['api_password'], 'msg'=>$msg, 'mobile'=>$mobile, 'needstatus'=>$needstatus, 'extno'=>$extno ); $result=$this->_curlPost($this->chuanglan_config['api_send_url'],$postArr); $result=$this->_execResult($result); return$result[1]==0?true:$result[1]; } //通道2发送方法 privatefunction_sendAL($mobile,$msg){ $postArr=array( 'id'=>$this->alidayu_config['api_id'], 'key'=>$this->alidayu_config['api_key'], 'msg'=>$msg, 'mobile'=>$mobile, ); $result=$this->_curlPost($this->alidayu_config['api_send_url'],$postArr); $result=$this->_execResult($result); return$result[1]==0?true:$result[1]; } //-------------一些公共方法 /** *处理返回值\r\n分割 * */ privatefunction_execResult($result){ $result=preg_split("/[,\r\n]/",$result); return$result; } /** *处理返回值json * */ privatefunction_jsonResult($result){ $result=json_decode($result,true); return$result; } /** *通过CURL发送HTTP请求 *@paramstring$url//请求URL *@paramarray$postFields//请求参数 *@returnmixed */ privatefunction_curlPost($url,$postFields){ $postFields=http_build_query($postFields); $ch=curl_init(); curl_setopt($ch,CURLOPT_POST,1); curl_setopt($ch,CURLOPT_HEADER,0); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_POSTFIELDS,$postFields); $result=curl_exec($ch); curl_close($ch); return$result; } } $ob=newAr_Sms(Ar_Sms::ALIDAYU);//通道1发送 $res=$ob->sendSms('xxxxx','xxxxxx'); var_dump($res); $ob=newAr_Sms(Ar_Sms::LANCHUANG);//通道2发送 $res=$ob->sendSms('xxxxx','xxxxxx'); var_dump($res);
通过一个简单的分发实现多通道的自由切换,
由于只是简单的发送所以没有进一步的抽象~囧orz
钩子的实现方式,设想有点大,具体的实现还有带考究。。有时间我会研究研究的这里就抛一个简单的demo吧设想的是--》多途径多方式多通道支持方便扩展
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP基本语法入门教程》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。