在最近的项目当中使用的是phalapi框架,但是使用到了redis 发布者订阅者的模式,需要长时间开启监听的服务,故而服务那块实现的是原生的php,单项目框架当中都提倡将一些常用的配置提取到对应的地方,方便多个开发环境进行切换,因此使用到
//redis配置
defined('CONFIG_ROOT') || define('CONFIG_ROOT', dirname(__FILE__) . '/..');
$resConfig=require_once CONFIG_ROOT . '/../config/app.php';
$config = $resConfig["redisCon"];
// 回调地址
defined('SUBSCRIBE_URL') || define('SUBSCRIBE_URL', $resConfig['subscribeUrl']); //一开始这个地方使用的是变量,但是在回调函数的内部一直无法访问到该变量,受写过js的误解在函数外部定义的变量在函数内部可以正常的使用
date_default_timezone_set('Asia/Shanghai');
$redis = new Redis();
$redis->connect($config['host'], $config['port']);
$redis->auth($config['auth']);
$redis->setOption(Redis::OPT_READ_TIMEOUT, -1);
$redis->psubscribe(array(
'__keyevent@15__:expired'
), 'callbackEnd');
$redis->subscribe(array('distribute'), 'callback');
//订阅回调
function callback($redisObj, $channel, $msg)
{
$url = SUBSCRIBE_URL;
switch ($channel) {
case 'distribute':
try {
writeLog('回调的信息:' . $msg);
$data = json_decode($msg, true);
// 转发到微信接口
$httpUrl = $url . ".....";
.....
这样写才可以在代码执行当中正常的访问到该变量
先将php中的变量和常量的经验总结如下:
php变量的作用域可以分为三种
一、全局变量;
简单理解,就是函数外部定义的变量,只能在函数外部进行访问(并不是js语法当中的全局变量,一定要注意)
二、局部变量;
其实就是函数内部定义的变量,只能在函数内部使用,等同于js中定义的局部变量
三、超全局变量;
系统定义的变量,包括的全部变量,任何地方都能访问
如何实现函数内部与函数外部的互相访问?
首先看一段代码,这样是无法运行的
1 2 3 4 5 6 7 8 |
|
解决办法有三种:
1、在函数中传入参数$a
1 2 3 4 5 6 7 8 |
|
2、使用超全局变量$GLOBALS在函数内部进行访问
1 2 3 4 5 6 7 8 |
|
3、实现全局和局部的互相访问。使用Global关键字
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
该模块参考的博文地址是:https://www.cnblogs.com/dumenglong/p/11183884.html
再来解释一下php中的常量,常量常用于存储不经常改变的数据信息的量,常量的值被定义之后,在程序整个执行期间,这个值都有效,并且不可再次赋值。
真正意义上的php全局变量是被定义在所有函数外面的变量,其作用域是整个php文件,但是在用户自定义的内部是不可用的,想要在用户自定义的函数内部使用全局变量,要使用global关键字生命才可以。