PHP 5.4 vs 5.3:在同一文件中自动加载多个类

前端之家收集整理的这篇文章主要介绍了PHP 5.4 vs 5.3:在同一文件中自动加载多个类前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
首先,这有点长,谢谢你的阅读.

我的问题类似于这个问题:
Class not found in the same file

我有一个最初于2008年为PHP 5编写的定制框架,并且多年来它已经升级以使用PHP 5.3.我一直在关注5.4兼容性并遇到了严重的问题.

ORM层自动为每个DB表生成类.这些类都位于每个表的一个文件中,我们的自动加载器在需要时加载该文件.
例如,’public’模式(postgresql)中的’customer’表将具有以下类:
PublicCustomer,PublicCustomerDBReader,PublicCustomerDBWriter.
现在这可能不是理想的设置,但它是我们现在拥有的.

PHP 5.3中,如果需要PublicCustomer,则将包含,解析该文件,并且所有上述类都可用.因此,例如,如果在PublicCustomer上调用静态方法,并且该方法在PublicCustomerDBReader中调用某些内容,则该方法可以正常工作,因为该类位于同一文件中.

PHP 5.4中,看起来核心已经完成了一些优化.在上面的场景中:

>在PublicCustomer中调用静态方法.
>自动装带器查找并加载正确的文件.
> PHP解析器只解析它所需的位置; PublicCustomer类.它尚未解析或实例化PublicCustomerDBReader类.我可以通过测试类是否存在来确认这一点,并通过查看解析器在包含时是否到达文件的末尾,以及调用方法时(它没有).
>然后,PublicCustomer中的方法尝试在PublicCustomerDBReader中调用方法.这失败了,因为我们的自动加载器已经需要该文件一次.

在我看来,我有两个解决方案:

>将这些类分开,以便每个文件都有一个文件(这将产生大量文件)
>重新设计ORM层,以便不需要多个类.

我是否正确理解了上述问题?

有谁知道在PHP 5.4中是否进行了优化或更改会导致此行为?

我还没有考虑过这个问题的其他潜在解决方案吗?

将读取器/写入器类放在文件的头部.您也可以考虑提交错误报告,因为解析器应该只停止错误.

猜你在找的PHP相关文章