Реализация класса Image
Очевидно, что класс Image - это тот
же класс Tag, но с некоторыми дополнениями.
Логично в этом случае не создавать этот класс
с нуля, а унаследовать его от класса Tag:
<?php
class Image extends Tag
{
}
?>
Как мы описали выше, класс Image отличается
от класса Tag тем, что в Image
по умолчанию задаются атрибуты src
и alt.
Кроме того, обратите внимание на то, как мы вызываем конструкторы классов:
<?php
$image = new Tag('img');
$image = new Image();
?>
Как вы видите, класс Tag ожидает первым
параметром имя тега, а класс Image
вызывается без параметра - имя тега в данном
случае нет необходимости задавать, так как
наш класс всегда делает один и тот же тег
img.
Для того, чтобы реализовать такое поведение,
класс Image должен переопределить
конструктор родителя:
<?php
class Image extends Tag
{
public function __construct()
{
// Вызовем конструктор родителя, передав имя тега:
parent::__construct('img');
}
}
?>
Давайте в этом же конструкторе зададим атрибуты
src и alt:
<?php
class Image extends Tag
{
public function __construct()
{
$this->setAttr('src', ''); // установим атрибут src
$this->setAttr('alt', ''); // установим атрибут alt
parent::__construct('img'); // вызовем конструктор родителя
}
}
?>
Установку атрибутов можно упростить и выполнить в виде цепочки:
<?php
class Image extends Tag
{
public function __construct()
{
$this->setAttr('src', '')->setAttr('alt', '');
parent::__construct('img');
}
}
?>
При использовании нашего класса в дальнейшем
мы можем затереть эти атрибуты с помощью
setAttr на свое значение, а можем
не затереть - тогда они так и останутся со
значением '', смотрите пример:
<?php
// Затрем src, но не alt:
echo (new Image())->setAttr('src', 'img.png')->open(); // <img src="img.png" alt="">
?>
Самостоятельно напишите реализацию описанного
класса Image.
Используя созданный вами класс выведите на экран какую-нибудь картинку.
Установите созданной вами картинке атрибут
width в значение 300, а атрибут
height - в значение 200.