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

2025-05-29 0 97

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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21
//简单的钩子实现例子

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 于是就采用了一种简单的分发方式来实现

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104
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程序设计有所帮助。

原文链接:http://blog.csdn.net/u014017080/article/details/53184307

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 PHP钩子与简单分发方式实例分析 https://www.kuaiidc.com/94005.html

相关文章

发表评论
暂无评论