Основы ООП. Продолжение
Продолжим рассмотрение ООП в пхп версии 5. Узнаем еще про парочку возможностей, связанных с классами и подведем итоги двух статей про ООП. |
Метод доступа к свойствам объекта
Я тут вспомнил C#. Это тоже объектно-ориентированный язык. В нем возможно было определить специальные обработчики для доступа к свойствам класса: set и get. Метод set позволял переопределить функцию установки свойства объекта, а get - переопределить функцию взятия значения свойства объекта. Так вот в PHP5 оказывается тоже есть такие вещи:
class MyClass {
private $properties;
function __set($name, $value) {
echo "задание нового свойства $name = $value";
$this->properties[$name]=$value;
}
function __get($name) {
echo "чтение значения свойства ".$name;
return $this->properties[$name];
}
}
$obj = new MyClass;
$obj->property = 1; // Выводит "задание нового свойства property = 1"
$a = $obj->property; // Выводит "чтение значения свойства property"
echo $a; // выводит 1;
?>
То есть в этом случае мы задали массив $properties (доступный только внутри текущего объекта), который содержит все свойства класса, а обращаемся к этим свойствам через __set и __get. Эти методы дают нам возможность выполнить не только присвоение/взятие значения свойства объекта, но и выполнить какие-то другие действия. В рассмотренном выше случае эти действия - вывод строк с помощью echo.
Метод __toString()
Если мы сделаем так:
class MyClass {
}
$obj = new MyClass;
echo $obj;
?>
PHP5 поругается и скажет, что не может преобразовать объект в строку. Чтобы мы смогли преобразовать этот объект в строку, применяется специальный метод __toString():
class MyClass {
function __toString() {
return "MyClass";
}
}
$obj = new MyClass;
echo $obj; // Выводит "MyClass"
?>
Мы могли бы не пользоваться этим специальным методом, написав, например, простой метод, который делал бы то же самое:
class MyClass {
function myToString() {
return "MyClass";
}
}
$obj = new MyClass;
echo $obj->myToString(); // Выводит "MyClass"
?>
Но разработчики PHP5 решили вынести это в отдельный метод. Видимо неявное преобразование объекта в строку меньше загружает программера посторонними мыслями
Резюме
Итак, в последних двух статьях про ООП мы рассмотрели особенности объектно-основанного программирования на PHP5. Подчеркиваю - объектно-основанного, а не ориентированного, потому что объектно-ориентированное подразумевает использование абстрактных классов, интерфейсов, механизмов наследования и полиморфизма. А о них мы поговорим в другой статье. Нам же сначала надо переварить вышенаписанное
Хорошо било б виложить силку на Апач… Или посоветуйте движок…
В первых статьях я писал про инструменты. Советую использовать набор денвера [ссылка] - там и apache и mysql, все что тебе понадобится - там есть.
ух ты, доходчиво написано, все понятно, Спасибо автору.
Переходим к следующей статье из этого цикла.
“Советую использовать набор денвера”
мда…..
а я не советую. поставьте себе для опытов что-нибудь типа XAMPP или APPSERVER.
C денвером я в своё время столько горя хапнул, что теперь обхожу его стороной.
private $properties;
и
$obj->property = 1; ?
Тут бы не мешало упомянуть про мэджик методы. А то начинающим может будет непонятно каким мокаром происходит вызов __get & __set