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.