• 技术文章 >后端开发 >php教程

    详细介绍php钩子和简单分发方式

    黄舟黄舟2017-09-05 09:31:10原创953
    这篇文章主要介绍了PHP钩子与简单分发方式,结合实例形式分析了PHP钩子的定义与使用方法,以及多通道自由切换的实现技巧,需要的朋友可以参考下

    本文实例讲述了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);

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

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

    以上就是详细介绍php钩子和简单分发方式的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:php 分发 简单
    上一篇:php如何读取解析eml文件以及生成网页的示例分享 下一篇:php登录注册之BootStrap表单的实现功能
    Web大前端开发直播班

    相关文章推荐

    • 深入浅析PHP文件包含漏洞• php-GD库函数(3) • PHP开源论坛已经定型了,欢迎往测试 • 小弟我是刚转做PHP的 • nginx 配备php环境
    1/1

    PHP中文网