PHP从5.2.x更新到5.3.14导致了区域设置问题

PHP从5.2.x更新到5.3.14导致了区域设置问题,php,pear,Php,Pear,我们的服务器最近进行了更新(PHP从5.2.x更新到5.3.14) 由于此更新,我们无法使用由uu autoload()运行的自定义语言环境类 据我所知,这是由于“PEAR”中的某个位置存在一个Locale类造成的 有没有一种方法可以解决这个冲突问题,而不用将我的类名从Locale更改为其他名称(基本上是如何强制PEAR Locale不加载或仅为Locale请求而忽略它) 谢谢因为Locale现在是一个本机PHP类,所以不能直接重写它,这就是代码不再工作的原因 解决方案: 重新生成PHP副本,使

我们的服务器最近进行了更新(PHP从5.2.x更新到5.3.14) 由于此更新,我们无法使用由uu autoload()运行的自定义语言环境类 据我所知,这是由于“PEAR”中的某个位置存在一个Locale类造成的

有没有一种方法可以解决这个冲突问题,而不用将我的类名从Locale更改为其他名称(基本上是如何强制PEAR Locale不加载或仅为Locale请求而忽略它)


谢谢

因为
Locale
现在是一个本机PHP类,所以不能直接重写它,这就是代码不再工作的原因

解决方案:

  • 重新生成PHP副本,使其不包含区域设置模块。可能不是一个好主意,而且对兼容性肯定不好,但如果你绝望的话,也可以考虑

  • 重命名你的类。有一些重构工具可以使这类事情变得相当简单

  • 使用PHP5.3的名称空间特性为您的语言环境类提供与内置语言环境类不同的名称空间。在类文件的顶部添加一个namespace子句,并
    在希望引用Locale类而不是内置类的任何位置使用
    名称空间


  • 2和3之间的选择取决于你。我建议使用2,因为您的类在功能上可能与PHP类不同,所以您需要与它保持距离。但是,如果您想保留当前的类名,名称空间解决方案也是一个选项。

    到底是什么问题?它是如何以及何时显示的?问题是,我的Locale类中有一些函数不再运行,从而导致了致命错误“PHP警告:call_user_func()希望参数1是有效回调,类'Locale'没有方法'instance'”和“PHP致命错误:调用成员函数getLocaleString()在/…”中的非对象上,这仍然不是技术描述。PEAR类是否正在无条件加载,因此自动加载程序不会运行?它是自动加载还是优先于您自己的类?您真的希望加载PEAR类吗?我们刚刚查看并发现,从现在起,Locale是一个本地函数,从>=5.3开始。要回答您的问题,是的,它是无条件加载的,因为它是PHP5.3的原生版本;否,我不想加载它,但我无能为力。