业务需求是同一个对外开发的接口,通过服务器上的事件监听移动端传过来的变量调用不同的方法,碰到的问题是:第一次事件生成同时接收到移动端的变量,可以执行。第二次再执行的时候,因为第一次生成监听事件第二次不再重复生成事件,但是第二次执行时所有的时间直接丢失了。网上找到的问题是:在PHP中,所有的变量无论是全局变量还是类的静态成员,都是页面级的,每次页面被执行时,都会重新建立新的对象,都会在页面执行完毕后被清空,这样似乎PHP单例模式就没有什么意义了,所以PHP单例模式我觉得只是针对单次页面级请求时出现多个应用场景并需要共享同一对象资源时是非常有意义的。请问有没有其他办法解决这个问题?

解决方案 »

  1.   

    可借用第三方软件 Memcached 构造出真正意义上的全局变量
      

  2.   

    我是把变量定义成静态的变量,然后写到内存里面保存。但是监听启动的时候生成call_user_func_array的回调方法是匿名函数,保存不了到内存里面。每次接口访问完,监听事件就丢失了。
      

  3.   

    用数据库,或者 redis,或者共享内存,或者磁盘文件。
    只是,有这样一个问题,PHP不同于应用程序,每个php请求都是独立的临时的,也没有逻辑锁的概念,并发访问时,控制不好容易出错。如果你的功能不复杂,不是需要特别多的php来相应,可以考虑自己写应用程序,模拟php响应客户端。
      

  4.   

    每一次客户端请求服务器php,产生的变量,都是临时变量,一旦这个php请求执行完毕,所有的数据都会消失。你想要在下次请求这个php时获取上次产生的数据,只能借助其它方式,最高效的是共享内存。