2013-07-27 2 views
0

Я просто экспериментирую с программированием ООП Я пытаюсь создать класс формы. Я не могу напечатать этот флажок, как я могу проверить, где все идет дальше?Basic OOP PHP form class

require_once('form.php'); 
    $gender = new Checkbox('Please select your gender','gender',array('male','female')); 
    echo $gender->show_checkbox(); 

Файл с классом:

class Inputfield{ 

    public $id; 
    public $options_array; 
    public $question; 
    public $type; 
    function __construct($newquestion,$newid,$newoptions_array){ 
    $this->question=$newquestion; 
    $this->id=$newid; 
    $this->type="txt"; 
    $this->options_array=$newoptions_array; 
    } 
    public function show_options($options_arr,$type,$id,$classes){ 
    $output=""; 
    foreach($options_arr as $option){ 
     $output.="<label for=\"".$option."\"></label><input name=\"".$option."\" type=\"".$type."\" id=\"".$id."\" class=\"".$classes."\">"; 
    } 
    return $output; 
    } 
    public function show_question(){ 
    $output="<h3 class='question'>".$this->vraag."</h3>"; 
    return $output; 
    } 
} 
class Checkbox extends Inputfield{ 
    function __construct($newquestion,$newid,$newoptions_array){ 
    $this->question=$newquestion; 
    $this->id=$newid; 
    $this->type="checkbox"; 
    $this->options_array=$newoptions_array; 
    } 

    public function show_checkbox(){ 
    $output=show_question(); 
    $output.=show_options($this->options_array,'checkbox',$this->id,'class'); 
    return $output; 
    } 
} 
+2

Что можно сказать об установке error_reporting и display_errors ini? – bwoebi

+1

Как один совет, я думаю, вы должны переименовать свой метод 'show_checkbox()' в нечто более общее, например 'render()', а также написать метод 'render()' для класса InputField. Это позволит вам расширить InputField в таком количестве классов, сколько вы хотите, и перебрать множество объектов, наследующих от InputField, и вызвать их метод «render()», не зная, что они на самом деле. Изучите [полиморфизм] (http://en.wikipedia.org/wiki/Polymorphism_%28computer_science%29) для получения дополнительной информации об этом. –

ответ

5
  1. Вы вызываете методы экземпляра с $this: $this->show_options();
  2. Вам не нужно копировать-вставить весь конструктор, как только он идентичен один в родительском классе
    1. В случае, если он совпадает со словом, вы можете назвать его parent::__construct(...), а затем d efine a custom $this->type="checkbox";
    2. Вы не можете определить его во время выполнения, но указать его как значение по умолчанию для свойства.
2

Вы должны использовать $this в контексте объекта. Например. в вашем методе show_checkbox, напишите:

$output = $this->show_question(); 
$output .= $this->show_options(...);