Доступ к защищенным элементам может осуществляться методами своего класса и любого порожденного класса. Общедоступные свойства позволяют обходить принципы инкапсуляции, так как они позволяют подклассам при написании непосредственно зависеть от конкретного свойства. Однако защищенные методы предоставляют меньшую угрозу, и их можно рассматривать как методы, предназначенные только для экспертов. Подклассы, использующие защищенные методы, должны также знать своих "предков".
В листинге 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 не применимо к свойствам.
ТОП-10 популярных
Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...
БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Компьютер для гурманов.«Эксимер ДМ»
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...
В дополнение к календарным типам, предназначенным для хранения даты и времени отдельно, MySQL также поддерживает гибридные типы данных DATETIME и...
Вообще, к изменению настроек сервера прибегают очень редко. В MySQL программа заранее настроена так, чтобы соответствовать самым распространенным и основным...
PHP. Классы и объекты. Часть Восьмая.
28-12-2009
<< Предыдущая статья | Следующая статья >> |
PHP. Классы и объекты. Часть Седьмая. | PHP. Классы и объекты. Часть Девятая. |