2010-02-10 19 views
5

Tôi có một Hệ thống tạo biểu mẫu hoàn chỉnh. Có nhiều loại câu hỏi khác nhau và tôi phải kiểm tra xem câu trả lời của người đó có đúng không.Làm thế nào tôi có thể "bỏ đặt" một lớp đã được khai báo

Tất cả các loại câu hỏi có lớp riêng của nó sẽ luôn được gọi là ItemClass và Lớp này nằm trong Tệp riêng của nó.

Mỗi khi một câu hỏi được yêu cầu, tôi bao gồm Tệp và có sự cố: Tôi phải kiểm tra các loại Câu hỏi khác nhau trong một Tệp PHP. Và sau đó có lỗi - ItemClass đã được khai báo.

Có phương pháp nào để hủy đặt lớp không?

Trả lời

0

Tôi đã thử nghiệm giải pháp của bạn và cuối cùng tôi có một ý tưởng: tôi đổi tên thành lớp cho mỗi loại của nó (ynItemClass, markItemClass, ...) và khi tôi cần một khoản Gõ đưa ra sau

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

Và nó hoạt động !!

Chúc một ngày tốt đẹp! Dominik

4

số

Khi một lớp được decalred nó không thể là 'unset'

lẽ namespaces có thể được sử dụng đối với bạn?

+0

Mhm Tôi không chắc mình có thể sử dụng điều đó cho vấn đề của mình –

6

Không, không thể "xác định" một lớp hiện có. Trong trường hợp của bạn, bạn không nên có nhiều lớp có cùng tên: mỗi lớp phải có một tên khác biệt và bạn nên sửa đổi cách bạn đang làm việc với những tên đó, vì vậy mã của bạn giao dịch với các lớp chứ không phải có tên ItemClass.


Ví dụ, bạn có thể có:

  • ItemClass_Type1 trong itemclass_type1.php
  • ItemClass_Type2 trong itemclass_type2.php

và vân vân - và những lớp học tất cả có thể mở rộng các lớp cơ sở tương tự, nếu cần thiết/nếu nó có ý nghĩa.


(Trong một thời gian, tôi nghĩ có lẽ runkit có thể giúp với ý tưởng "undefining một lớp", nhưng có vẻ không phải là một chức năng để làm điều đó - và mở rộng mà không phải là khá ổn định và không được sử dụng trên máy chủ sản xuất)

1

No. Bạn có lỗi thiết kế.
Bạn có lẽ nên để các loại câu hỏi khác nhau kế thừa từ một lớp câu hỏi trừu tượng và/hoặc (1) sử dụng factory pattern hoặc (2) đã sử dụng strategy pattern.

Các vấn đề liên quan