# Атрибуты без значения в классе Tag

В 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`.

← →
↑