我是PHP的新手,我正在寻找一种方法来定义某些对象,从整个项目中可以从多个PHP脚本中全局访问.
在Java中,如果我在全球范围内访问某些对象,我定义命名一些公共类Globals,并定义我需要访问的对象静态的Globals类.然后,我随时随地访问这些对象:Globals.variable_name.
基本上,我只需要初始化这些全局对象一次,然后在需要时使用它们.
一个用例:
我有一个名为的类Logger,它具有在日志文件中记录某些事件的方法.我需要有一个Logger实例/对象可供项目中的所有PHP脚本使用,无论何时他们要记录一些东西.我宁愿不让每个PHP脚本使用它自己的实例Logger.
我试过的天真的Java式方法,但没有用:
我创建了一个名为公共类Globals在一个单独的PHP文件(名为Globals.php)一个静态类型的对象Logger,命名$logHandle.我把这个PHP文件包含在我需要这个Logger对象的所有其他PHP文件中.然后我尝试使用Globals->logHandle其他PHP脚本之一访问此对象.这次尝试失败了.
有一些类似的方法吗?
谢谢.
在Web应用程序中,为每个请求初始化PHP环境 - 并且每个请求都在具有自己的内存空间的不同进程中处理.可以跨不同实例共享对数据(包括序列化对象,但不包括数据库连接和文件句柄等资源)的访问.您可能已经知道这一点,但尚未意识到它如何影响您编写代码的方式.
我宁愿不让每个PHP脚本使用它自己的Logger实例
为什么不?
一个很好的理由是允许多个进程写入同一个打开的文件句柄需要锁定以防止文件全部被搞砸.但这是PHP - 停止从SCRATCH重新开始.写入stderr会将详细信息附加到Web服务器错误日志或使用操作系统syslog工具 - 这就是它们的用途.
所有PHP实例都不可能使用相同的对象 - 您可以在所有实例中反序列化对象 - 但它不是同一个对象.您可以使用单个对象运行守护程序,该对象可以通过套接字连接访问所有其他PHP实例 - 但它不在同一地址空间中运行.
如果您有效地拥有一个通过具有固定名称的对象可以普遍使用的类,则只需在每个脚本中或通过包含文件创建该对象的实例.您尝试的方法是解决此问题的方法(但不要用保留字命名对象).我们不知道为什么它失败了,因为您没有提供任何错误消息或代码.