В HTML существуют атрибуты без значения,
например, disabled
:
<input id="test" disabled>
Давайте сделаем так, чтобы метод setAttr
мог создавать и такие атрибуты. Пусть, чтобы
создать атрибут без значения, вторым параметром
метода мы будем передавать значение true
:
<?php
$tag = new Tag('input');
echo $tag
->setAttr('id', 'test')
->setAttr('disabled', true) // создаем атрибут без значения
->open(); // выведет <input id="test" disabled>
?>
Пока наш класс Tag
не дает возможность
сделать такой атрибут. Давайте поправим это,
внеся соответствующие правки в метод getAttrsStr
:
<?php
private function getAttrsStr($attrs)
{
if (!empty($attrs)) {
$result = '';
foreach ($attrs as $name => $value) {
// Если значение атрибута равно true:
if ($value === true) {
$result .= " $name"; // это атрибут без значения
} else {
$result .= " $name=\"$value\""; // это атрибут со значением
}
}
return $result;
} else {
return '';
}
}
?>
Применим изменение к классу:
<?php
class Tag
{
private $name;
private $attrs = [];
public function __construct($name)
{
$this->name = $name;
}
public function setAttr($name, $value = true)
{
$this->attrs[$name] = $value;
return $this;
}
public function open()
{
$name = $this->name;
$attrsStr = $this->getAttrsStr($this->attrs);
return "<$name$attrsStr>";
}
public function close()
{
$name = $this->name;
return "</$name>";
}
private function getAttrsStr($attrs)
{
if (!empty($attrs)) {
$result = '';
foreach ($attrs as $name => $value) {
if ($value === true) {
$result .= " $name";
} else {
$result .= " $name=\"$value\"";
}
}
return $result;
} else {
return '';
}
}
}
?>
Проверим работу нашего класса:
<?php
$tag = new Tag('input');
echo $tag
->setAttr('id', 'test')
->setAttr('disabled', true)
->open(); // выведет <input id="test" disabled>
?>
Самостоятельно внесите соответствующие правки
в ваш класс Tag
.