PHP钩子与简单分发方式实例分析


Posted in PHP onSeptember 04, 2017

本文实例讲述了PHP钩子与简单分发方式。分享给大家供大家参考,具体如下:

//简单的钩子实现例子
class tool{
  public static function main($class, $fun, $data = ''){
    //前置公共操作
    $con = new $class;
    $con->$fun($data);
    //后置公共操作
  }
}
class a{
  function b($data){
    echo '我是方法b';
  }
}
class c{
  function d($data){
    echo '我是方法d';
  }
}
//钩子调用
tool::main('a','b','222');

在封装短信通道的时候本打算用钩子来实现的,

可以自动发送短信(多通道)email,push等消息。。。

后来发现业务需求并没有想象中那么复杂,开发就搁置了。。。。

T_T 于是就采用了一种简单的分发方式来实现

class Ar_Sms{
  const LANCHUANG = 1;//通道1
  const ALIDAYU = 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',
  );
  public function __construct($type=1){
    switch($type){
      case self::LANCHUANG:
        $this->type = $type;break;
      case self::ALIDAYU:
        $this->type = $type;break;
      default:
        $this->type = false;
    }
  }
  //对外抛出的发送方法
  public function sendSms($mobile, $msg){
    switch($this->type){
      case self::LANCHUANG:
        return $this->_sendCL($mobile, $msg);
      case self::ALIDAYU:
        return $this->_sendAL($mobile, $msg);
      default:
        return false;
    }
  }
  //通道1发送方法
  private function _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发送方法
  private function _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 分割
   *
   */
  private function _execResult($result){
    $result=preg_split("/[,\r\n]/",$result);
    return $result;
  }
  /**
   * 处理返回值json
   *
   */
  private function _jsonResult($result){
    $result=json_decode($result, true);
    return $result;
  }
  /**
   * 通过CURL发送HTTP请求
   * @param string $url //请求URL
   * @param array $postFields //请求参数
   * @return mixed
   */
  private function _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 = new Ar_Sms(Ar_Sms::ALIDAYU);//通道1发送
$res = $ob->sendSms('xxxxx','xxxxxx');
var_dump($res);
$ob = new Ar_Sms(Ar_Sms::LANCHUANG);//通道2发送
$res = $ob->sendSms('xxxxx','xxxxxx');
var_dump($res);

通过一个简单的分发实现多通道的自由切换,

由于只是简单的发送所以没有进一步的抽象~ ??rz

钩子的实现方式,设想有点大,具体的实现还有带考究。。有时间我会研究研究的 这里就抛一个简单的demo吧 设想的是--》多途径 多方式 多通道支持 方便扩展

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
实用函数9
Nov 08 PHP
PHP的简易冒泡法代码分享
Aug 28 PHP
奉献出一个封装的curl函数 便于调用(抓数据专用)
Jul 22 PHP
zf框架的数据库追踪器使用示例
Mar 13 PHP
国产PHP开发框架myqee新手快速入门教程
Jul 14 PHP
ThinkPHP的常用配置选项汇总
Mar 24 PHP
PHPMailer发送邮件
Dec 28 PHP
Yii 2.0自带的验证码使用经验分享
Jun 19 PHP
浅谈PHP发送HTTP请求的几种方式
Jul 25 PHP
PHP有序表查找之二分查找(折半查找)算法示例
Feb 09 PHP
PHP两个n位的二进制整数相加问题的解决
Aug 26 PHP
PHP Cli 模式设置进程名称的方法
Jun 12 PHP
PHP实现登录注册之BootStrap表单功能
Sep 03 #PHP
[原创]PHP实现生成vcf vcard文件功能类定义与使用方法详解【附demo源码下载】
Sep 02 #PHP
php简单读取.vcf格式文件的方法示例
Sep 02 #PHP
PHP实现简单的模板引擎功能示例
Sep 02 #PHP
PHP实现类似于C语言的文件读取及解析功能
Sep 01 #PHP
PHP设计模式之工厂模式实例总结
Sep 01 #PHP
浅谈关于PHP解决图片无损压缩的问题
Sep 01 #PHP
You might like
日本十大最佳动漫,全都是二次元的神级作品
2019/10/05 日漫
150kHz到30Mhz完全冲浪手册
2020/03/20 无线电
smarty静态实验表明,网络上是错的~呵呵
2006/11/25 PHP
PHP自定义函数收代码
2010/08/01 PHP
百度工程师讲PHP函数的实现原理及性能分析(一)
2015/05/13 PHP
浅谈php错误提示及查错方法
2015/07/14 PHP
简单谈谈PHP vs Node.js
2015/07/17 PHP
Yii使用DeleteAll连表删除出现报错问题的解决方法
2016/07/14 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
详解php中生成标准uuid(guid)的方法
2019/04/28 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
2020/02/28 PHP
PHP copy函数使用案例代码解析
2020/09/01 PHP
jquery+ajax+C#实现无刷新操作数据库数据的简单实例
2014/02/08 Javascript
javascript判断并获取注册表中可信任站点的方法
2015/06/01 Javascript
Javascript中的数据类型之旅
2015/10/18 Javascript
AngularJS实现DOM元素的显示与隐藏功能
2016/11/22 Javascript
jQuery生成假加载动画效果
2016/12/01 Javascript
AngularJS+Bootstrap3多级导航菜单的实现代码
2017/08/16 Javascript
JS Thunk 函数的含义和用法实例总结
2020/04/08 Javascript
JavaScript如何操作css
2020/10/24 Javascript
python表格存取的方法
2018/03/07 Python
python 利用pywifi模块实现连接网络破解wifi密码实时监控网络
2019/09/16 Python
python实现交并比IOU教程
2020/04/16 Python
使用Nibabel库对nii格式图像的读写操作
2020/07/01 Python
基于python调用jenkins-cli实现快速发布
2020/08/14 Python
html5桌面通知(Web Notifications)实例解析
2014/07/07 HTML / CSS
史蒂夫·马登加拿大官网:Steve Madden加拿大
2017/11/18 全球购物
销售业务实习自我鉴定
2013/09/23 职场文书
电大毕业自我鉴定
2014/02/03 职场文书
英语课外活动总结
2014/08/27 职场文书
党建工作目标管理责任书
2015/01/29 职场文书
2015年七夕爱情寄语
2015/03/24 职场文书
党员进社区活动总结
2015/05/07 职场文书
详解JAVA中的OPTIONAL
2021/06/14 Java/Android
微信小程序实现聊天室功能
2021/06/14 Javascript
Java Spring Boot 正确读取配置文件中的属性的值
2022/04/20 Java/Android