【发布时间】:2012-01-23 17:45:21
【问题描述】:
我今天偶然发现了一个有趣的问题。在单个文件的多个声明的上下文中,如果类B 实现了接口A,并且类C 扩展了类A,则必须在类@ 之前声明类B之前 987654326@.
以下代码不起作用:
interface A {}
class C extends B {} // Class 'B' not found
class B implements A {}
这解决了它:
interface A {}
class B implements A {}
class C extends B {} // Class 'B' is found
但这很好用:
class A {}
class C extends B {} // Class 'B' is found
class B extends A {}
这些是我在 PHP 5.3.8 (Win32) 和 PHP 5.3.3-1ubuntu9.6 w/suhosin 上的结果。
所以问题是,这是记录在案的行为吗?为什么它适用于类而不适用于接口?还是应该将其视为错误?
在我深入研究 PHP 的源代码和/或打开 PHP 错误票之前,请告诉我您的经验。 :)
谢谢!
注意:我知道这只是类声明顺序的问题,但这让我感到困惑......如果不合适,请不要犹豫关闭。
【问题讨论】:
-
您在 Windows 下显然适用于您的第三个代码示例在 Debian、PHP 5.3.8-1~dotdeb.2 下不适用于我。我收到了致命错误。
-
@NB:有趣。在 Ubuntu 上的 5.3.3 中也适用于我。这里有些不一致,无论是行为还是文档。
-
我直接从 shell 测试了代码(使用
php -a)。没有偶然包含的框架或自动加载器。 -
第三个示例也适用于我在使用 mamp pro 的 Mac 上。在 PHP 版本 5.2.17 和 5.3.5 上运行良好
标签: php inheritance interface