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);

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值