Rozpoczynamy nową serię o programowaniu obiektowym w PHP. Nasze pierwsze ćwiczenie to klasa reprezentująca Tag HTML. Do dzieła!

Zaczynamy od utworzenia klasy i pól jej instancji oraz konstruktora:

class Tag {
    public $tag;
    public $content;

    public function __construct($tag, $content){
        $this->tag = $tag;
        $this->content = $content;
    }
}

$li = new Tag("li", "PHP"); //reprezentuje <li>PHP</li>

Okej, teraz funkcje openingTag, closingTag i outputTag:

class Tag {
    public $tag;
    public $content;

    public function __construct($tag, $content)
    {
        $this->tag = $tag;
        $this->content = $content;
    }

    public function openingTag(){
         return "<$this->tag>";
    }

    public function closingTag(){
        return "</$this->tag>";
    }
    public function outputTag(){
        return $this->openingTag() . $this->content . $this->closingTag();
    }

}
$li = new Tag("li", "PHP"); //reprezentuje <li>PHP</li>
echo $li->outputTag(); //drukuje <li>PHP</li>

Ok, jakoś już to wygląda. Teraz dodajemy kolejne pola – id oraz classlist:

class Tag {
    public $tag;
    public $content;
    public $id = '';
    public $classlist = array();

    public function __construct($tag, $content)
    {
        $this->tag = $tag;
        $this->content = $content;
    }

    public function openingTag(){
         return "<$this->tag>";
    }

    public function closingTag(){
        return "</$this->tag>";
    }
    public function outputTag(){
        return $this->openingTag() . $this->content . $this->closingTag();
    }

}
$li = new Tag("li", "PHP"); //reprezentuje <li>PHP</li>
echo $li->outputTag(); //drukuje <li>PHP</li>
$li->classlist[] = 'btn';
$li->classlist[] = 'btn-danger';
$li->id = 'php-li';

Możemy teraz sobie dodawać klasy oraz element ID. Problem w tym, że openingTag jeszcze tego nie obsługuje – musimy zatem tę metodę zmodyfikować:

<?php 

class Tag {
    public $tag;
    public $content;
    public $id = '';
    public $classlist = array();

   (...)

    public function openingTag(){
        $tag = "<";
        $tag .= $this->tag;
        if(!empty($this->id)){
            $tag .= ' id="';
            $tag .= $this->id;
            $tag .= '"';
        }
        if(count($this->classlist) > 0){
            $tag .= ' class="';
            $tag .= implode(' ', $this->classlist);
            $tag .= '"';
        }
        $tag .= ">";
        return $tag;
    }

    //(...)

}


$li = new Tag("li", "PHP");
$li->classlist[] = 'btn';
$li->classlist[] = 'btn-danger';
$li->id = 'php-li';
echo $li->outputTag();
//<li id="php-li" class="btn btn-danger">PHP</li>

Jak widać nasza funkcja zaczyna od otworzenia tagu, następnie dodaje jego nazwę i, jeżeli jest taka potrzeba, element ID oraz classlist.