我怎样才能“取消”已宣布的课程

时间:2010-02-10 11:12:27

标签: php oop class

我有一个完整的表格创建系统。有许多不同的问题类型,我必须检查这个人的答案是否正确。

所有类型的问题都有自己的类,它总是被称为ItemClass,而这个类在它自己的文件中。

每次询问问题时我都会包含文件,并且存在问题:我必须在一个PHP文件中检查不同类型的问题。然后出现错误 - ItemClass已经声明。

是否有任何方法可以取消设置类?

4 个答案:

答案 0 :(得分:6)

不,不可能“取消定义”现有的课程。

在您的情况下,您不应该有几个具有相同名称的类:每个类应该具有不同/不同的名称,您应该修改您使用它们的方式,因此您的代码处理未命名的类ItemClass


例如,您可以:

    ItemClass_Type1
  • itemclass_type1.phpItemClass_Type2
  • itemclass_type2.php

等等 - 这些类可以扩展相同的基类,如果需要/如果有意义的话。


(有一段时间,我想也许runkit可以帮助解决“定义一个阶级”的想法;但似乎没有这样做的功能 - 而且这种扩展并不是很稳定不应在生产服务器上使用)

答案 1 :(得分:4)

没有

一旦宣布了一个类,就不能“取消设置”

也许namespaces可能会对你有用吗?

答案 2 :(得分:1)

没有。你有一个设计缺陷。
您应该让不同类型的问题从一个抽象问题类继承和/或(1)使用factory pattern或(2)使用strategy pattern

答案 3 :(得分:0)

我测试了你的解决方案,最后我得到了一个想法: 我将Classes重命名为每个类型(ynItemClass,markItemClass,...),当我需要一个Item Type时,我做了以下

$it = $item->item_type."ItemClass";
$test = new $it($smarty);

它有效!!

祝你有愉快的一天! 多米尼克