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

问题描述 投票:6回答:4

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

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

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

是否有任何方法可以取消课程?

php oop class
4个回答
6
投票

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

在你的情况下,你不应该有几个都具有相同名称的类:每个类应该有一个不同/不同的名称,你应该修改你使用它们的方式,所以你的代码处理的不是名为ItemClass的类。

例如,您可以:

  • ItemClass_Type1itemclass_type1.php
  • ItemClass_Type2itemclass_type2.php

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

(有一段时间,我想也许runkit可以帮助“取消定义一个类”的想法;但似乎没有这样做的功能 - 并且该扩展不是很稳定,不应该用于生产服务器)


4
投票

没有。

一旦宣布了一个类,它就不会被“取消”

也许namespaces对你有用吗?


1
投票

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


0
投票

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

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

它的工作原理!!

祝你今天愉快!多米尼克

© www.soinside.com 2019 - 2024. All rights reserved.