捕获PHP对象实例化错误

捕获PHP对象实例化错误,php,php-5.2,Php,Php 5.2,PHP将实例化对象的失败视为整个应用程序的一个致命错误(无法捕获),这让我非常恼火。我有一组类,这些类对于我的应用程序的运行来说并不是绝对必要的——它们真的很方便。我有一个工厂对象,它试图实例化配置文件中指示的类变量 正在为邮件存储部署此机制,它将支持多种存储类型: DatabaseMessageStore FileMessageStore MemcachedMessageStore 等等 MessageStoreFactory类将从配置文件中读取应用程序的首选项,实例化并返回相应类的实例

PHP将实例化对象的失败视为整个应用程序的一个致命错误(无法捕获),这让我非常恼火。我有一组类,这些类对于我的应用程序的运行来说并不是绝对必要的——它们真的很方便。我有一个工厂对象,它试图实例化配置文件中指示的类变量

正在为邮件存储部署此机制,它将支持多种存储类型:

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

在实例化周围添加一个条件以确保
class_存在()
可能很容易,但是
MemcachedMessageStore
扩展了PHP的
Memcached
类。因此,如果没有安装PHP的memcached绑定,则
class_exists()
测试将成功,尽管实例化将失败


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

如果使用自动加载加载类文件(您应该这样做),您可以在自动加载功能的末尾抛出一个自定义异常如果中请求的类仍然不可用于实例化。
这应该在使用不存在的类时触发,即使对于PHPs内部类也是如此。因此,它应该在您的情况下触发。

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

据我所知,这在PHP5.3之前是无法实现的。我所做的是在实例化扩展它的类之前,让工厂类检查是否存在
Memcached
。对我的口味来说,它笨重而且太脆了,但它现在还有效。当我们升级到5.3时,我会对它进行一些修改。

我读错了吗?从我所读到的内容来看,捕获autoloader方法中捕获的异常的能力仅在5.3版之后才存在。可悲的是,我使用的是5.2。值得注意的是,我使用的是一个框架,所以这些类已经包含/定义了。我认为这将通过自动加载方法。