1
我目前正在使用一些面向對象的子類化php來弄髒我的手。我想使用一個數組來創建一些表單域,並且這些域根據它們的類型被分成不同的類。這意味着我有一個名爲「form_field」的主類,然後有一堆名爲「form_field_type」(例如「form_field_select」)的子類。這個想法是,每個子類都「知道」如何在顯示方法中最好地生成他們的HTML。基於PHP中的字符串動態實例化一個類
因此,可以說,我寫一個這樣的數組:
$fields = array(
array(
'name' => 'field1',
'type' => 'text',
'label' => 'label1',
'description' => 'desc1',
'required' => true,
),
array(
'name' => 'field2',
'type' => 'select',
'label' => 'label1',
'description' => 'desc1',
'options' => array(
'option1' => 'Cat',
'option2' => 'Dog',
),
'ui' => 'select2',
'allow_null' => false,
)
);
話,我想創建一個循環,進行實例化的類型正確的類:
foreach ($fields as $field) {
$type = $field['type'];
$new_field = // instantiate the correct field class here based on type
$new_field->display();
}
會是什麼這裏最好的辦法是?我想避免做這樣的事情:
if ($type == 'text') {
$new_field = new form_field_text();
} else if ($type == 'select') {
$new_field = new form_field_select();
} // etc...
這只是感覺效率低下,我覺得必須有更好的方式?在這種情況下是否有一種很好的模式,或者我正在以這種錯誤的方式解決這個問題?
我想你應該承擔的工廠設計模式看看。 – Sascha 2014-09-21 14:38:26
可能的重複:http://stackoverflow.com/questions/4578335/creating-php-class-instance-with-a-string – algorhythm 2014-09-21 14:45:28