捕获PHP对象实例化错误

时间:2010-06-10 12:27:47

标签: php php-5.2

我真的很感激我,PHP认为无法为整个应用程序实例化对象致命错误(无法捕获)。我有一些类对于我的应用程序运行并不是非常必要的 - 它们真的很方便。我有一个工厂对象,试图实例化配置文件中指示的类变体。

此机制正在部署用于邮件存储,并将支持多种商店类型:

  • DatabaseMessageStore
  • FileMessageStore
  • MemcachedMessageStore

MessageStoreFactory类将从配置文件中读取应用程序的首选项,实例化并返回相应类的实例。

在实例化中打一个条件可能很容易,以确保class_exists(),但MemcachedMessageStore扩展PHP的Memcached类。因此,class_exists()测试将成功 - 尽管实例化将失败 - 如果未安装PHP的memcached绑定。

有没有其他方法可以测试一个类是否可以正确实例化?如果不能,我需要做的就是告诉用户哪些功能对他们不可用,但让他们继续使用该应用程序。

3 个答案:

答案 0 :(得分:0)

如果您使用自动加载来加载您的类文件(您应该这样做),您可以在自动加载器函数的末尾抛出自定义异常,如果请求的类仍然不可用于实例化。 这应该在任何时候使用非现有类时触发,即使对于PHP内部类也是如此。所以它应该在你的情况下触发。

答案 1 :(得分:0)

如果您的问题是捕获致命错误,您应该尝试编写自己的错误处理程序并根据错误消息采取相应措施。 通过这种方式,您可以使用Memcache解决遗留问题。

答案 2 :(得分:0)

据我所知,这不能在PHP 5.3之外完成。我所做的是在实例化扩展它的类之前让工厂类检查Memcached的存在。这对我的口味来说太笨拙而且太脆弱了,但它现在起作用了。当我们升级到5.3时,我会稍微重做一下。