ТОП-10 популярных



Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...

НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...

БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...

Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...

Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...

Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...

ПОД ЛИТЕРОЙ «N»
Aтаку LCD-мониторов не остановить, а масштабы этого наступления даже немного пугают. Судите сами — многие пользователи только начинают приглядываться к новому для...


Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...

Размер объему не помеха.
С тех пор как компания Fujitsu отказалась от производства жестких дисков для настольных компьютеров, многие пользователи начали забывать о том,...


Какую только информацию мы не помещаем на компакт-диски: резервные копии важных данных, музыку, фильмы... Многие полагают, что главное - «купить...

Спонсор статьи: http://www.itgen26.net/ ремонт мобильных телефонов в ставрополе.

PHP. Классы и объекты. Часть Восьмая.


28-12-2009

Доступ к защищенным элементам может осуществляться методами своего класса и любого порожденного класса. Общедоступные свойства позволяют обходить принципы инкапсуляции, так как они позволяют подклассам при написании непосредственно зависеть от конкретного свойства. Однако защищенные методы предоставляют меньшую угрозу, и их можно рассматривать как методы, предназначенные только для экспертов. Подклассы, использующие защищенные методы, должны также знать своих "предков".
В листинге 6.9 код из листинга 6.8 доработан таким обратом, что он включает подкласс Widget с именем Thing. Заметим, как Widget сейчас включает метод getName. Вызов этого метода из экземпляра Widget не разрешен, и конструкция $w1->getName() дает ошибку. Однако метод getName внутри подкласса Thing может вызывать этот защищенный метод. Конечно, это очень упрощенный пример для того, чтобы доказать, что Widget::getName защищен. На практике использование защищенных методов в процедурах делается в предположении о полном понимании программистом внутренней структуры объекта с целью обеспечить функциональность, которой можно воспользоваться вне класса.

| Листинг 6.9. Защищенные элементы_
<?php
class Widget
{
private $name; private $price; private $id;
public function __construct($name, $price) 
{
$this->name = $name; $this->price = floatval($price); $this->id = uniqid();
}
//проверка идентичности двух заготовок public function equals($widget)
{
return(($this->name == $widget->name)AND ($this->price == $widget->price));
}
protected function getName()
{
return($this->name);
}
}
class Thing extends Widget
{
private $color;
public function setColor($color)
{
$this->color = $color;
}
public function getColor()
{
return($this->color);
}
public function getName()
{
return(parent::getName());
}
}
$w1 = new Widget('Cog', 5.00); $w2 = new Thing('Cog', 5.00); $w2->setColor('Yellow');
//TRUE (по-прежнему!) if($w1->equals($w2))
{
print("w1 и w2 идентичны <br>n");
}
// распечатать Cog print($w2->getName());
?>

 Существует возможность изменить присвоенный элементу тип доступа, перекрыв его вновь объявленным типом доступа, но здесь имеются некоторые ограничения. При перекрытии общедоступного элемента класса он по-прежнему останется общедоступным в порожденном классе. При перекрытии защищенного элемента класса он может остаться защищенным или стать общедоступным. Частные элементы остаются видимыми только в пределах своих локальных классов. Объявление элемента с именем, совпадающим с именем порождающего класса, создает в этом классе конкретный элемент. Поэтому технически нельзя перекрывать частные элементы. У вас будет возможность присвоить им любой нужный тип доступа. Ключевое слово final предоставляет еще одну возможность ограничить доступ к методу элемента. Порожденные классы не могут перекрывать методы, отмеченные как final, ни в одном из их "предков". Ключевое слово final не применимо к свойствам.

Понравился материал? Поделитесь с друзьями!



<< Предыдущая статьяСледующая статья >>
PHP. Классы и объекты. Часть Седьмая. PHP. Классы и объекты. Часть Девятая.