/** * @param string|array|Set $name * @param null|string|bool $value * * @return $this|Element|Tag|Field|Attr */ public function attr($name, $value = null) { if ($name instanceof Attr) { $this->setAttributeNode($name); if (Document::ID_ATTR === $name->name) { $this->setIdAttributeNode($name, true); } return $this; } if ($name instanceof Set) { foreach ($name as $a) { /** @var $a Attr */ $this->setAttributeNode($a); if (Document::ID_ATTR === $a->name) { $this->setIdAttributeNode($a, true); } } return $this; } if (!is_null($value)) { if (false === $value) { $this->removeAttribute($name); } else { if (true === $value) { $this->setAttribute($name, $name); } else { $this->setAttribute($name, (string) $value); if (Document::ID_ATTR === $name) { $this->setIdAttribute($name, true); } } } return $this; } if (is_array($name)) { foreach ($name as $attr => $val) { $this->attr($attr, $val); } return $this; } $attr = $this->getAttributeNode($name); if (!$attr) { $attr = $this->ownerDocument->createAttr($name); } return $attr; }