【问题标题】:Newbie php class inheritance question新手php类继承问题
【发布时间】:2009-08-25 14:25:33
【问题描述】:

我最近在一个 php 项目中遇到了一个问题,我终于意识到这与我构建课程的方式有关。如果我试图在一个页面中包含多个类并且两个类共享同一个父类,则脚本失败。我现在已经解决了这个问题,但想知道是否有人可以向我解释为什么我正在做的事情不起作用,因为我还没有完全理解它! 这是无效的说明:

A级。
B 类扩展 A。
C 类扩展 A。
D 类扩展 B。
E 类扩展 C。

我需要 D 类和 E 类,但脚本失败。如果类 C 不继承 A 那么一切正常。 显然,这与要求 A 级两次有关,但有人可以用非常简单的术语为我解释一下吗?!?!?

【问题讨论】:

  • 你得到什么错误信息?

标签: php oop inheritance class


【解决方案1】:

每个类只能声明一次。如果您需要多次定义类的文件,则解析器会遇到class A,进行内部查找并放弃:“嘿,您已经定义了该类”。最简单的解决方案是将每个类放到自己的文件中并调用require_once 而不是require

【讨论】:

  • 我想这可能是它......我总是使用 require 而不是 require_once 因为我真的不知道有什么区别!每个类都在它自己的文件中。
【解决方案2】:

每个类都有自己的文件吗?

您是否使用 require/include 而不是 require_once/include_once ? include_once 和 require_once 也不共享同一个包含文件表,因此您必须始终使用一个。

或者在 PHP5 中始终使用 __autoload 函数。

【讨论】:

    【解决方案3】:

    included 文件中定义的任何函数或类都在全局范围内声明。这就是为什么您可能会收到重新声明错误的原因。解决方案是使用require_onceinclude_once 而不是requireinclude

    不过,最优雅的方法是使用__autoload,但这需要 PHP 版本 5 或更高版本。自动加载的唯一缺点是任何失败都是你自己无法处理的致命错误。

    【讨论】:

      猜你喜欢
      • 2010-09-15
      • 2011-10-11
      • 2013-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-19
      相关资源
      最近更新 更多