
Вместо введения
Сегодня меня посетила мысль написать пост о ООП в php, интересных приемах, методах и функциях для работы с классами. На мой взгляд, с введением полноценных конструкторов и деструкторов(начиная с версии php5) язык стал более приспособлен к ООП.
Неплохие приемы
Предлагаю Вашему вниманию рекурсию в ООП. Посетила мысль о создании рекурсивной функции, и получилось что-то вроде этого:
<?php
class foo{
private $n = 0;
function bar($a){
$this->n++;
if($this->n>13) return $a; // условие выхода
$a++; // соответственно тело
return $this->bar($a);
}
}
$foo = new foo();
echo $foo->bar(9); // выведет число 22
?>
Полезные методы
Первый метод, о котором мало упоминаний, это метод __get($property)(PHP5+). Он является методом — перехватчиком и вызывается при обращении к неопределенному свойству. Например:
<?php
class foo{
private function __get($property){
return $property." does not exist!";
}
}
$foo = new foo();
echo $foo->bar; // выводит bar does not exist!
?>
Модификатор private не мешает методу запускаться, но, тем не менее, не разрешает доступа к этому методу извне.
Из методов — перехватчиков также известны(PHP5+):
__call($method,$args) (вызывается при вызове неопределенного метода, $args является массивом переданных аргументов),
__set($property,$value) (вызывается, когда неопределенному свойству пытаются присвоить значение),
__isset($property) (попытка проверки неопределенного свойства функцией isset),
__unset($property) (неопределенное свойство очищают при помощи unset),
Функции для работы с классами
Пожалуй, одной из наиболее полезных функций будет get_class_methods($classname). Эта функция вернет Вам массив со всеми методами класса $classname с правом доступа public (помните, что если модификатор доступа не указан, то он приравнивается к public).
Ответом функции get_class_vars($classname) является массив имен атрибутов класса $classname, с модификатором доступа public (или без модификатора вообще).
get_object_vars($class) вернет массив имен и значений всех атрибутов класса $class (обратите внимание: на этот раз в виде аргумента передается не строка с именем класса, как было в предшествующих функциях, а уже созданный объект).
Функция method_exists($class, $method) поможет Вам проверить поддержку метода с заданным именем(т.е. опять-же private и protected методы игнорируются. Аргументы функции всё тот-же созданный объект, и строка с именем проверяемого метода.). Эта функция вернет false, если метод не поддерживается, и, соответственно true, если он доступен.
get_class($classobj) — вернет имя класса, к которому относится объект $classobj, а вот функция get_parent_class($classobj) ответит именем родительского класса, если он существует.
is_subclass_of($classobj, $classname) — возвратит true, если класс $classname наследован от объекта $classobj. Иначе — false.
А вот функция get_declared_classes() вернет массив с именами всех доступных классов.
Заключение
ООП в php двигается вперед, и, я предполагаю, что через пару версий появится множественное наследование классов, а соответственно много новых методов, функций и приемов. До скорого, дорогой читатель.
This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:
- Massacres That Matter - Part 1 - 'Responsibility To Protect' In Egypt, Libya And Syria
- Massacres That Matter - Part 2 - The Media Response On Egypt, Libya And Syria
- National demonstration: No attack on Syria - Saturday 31 August, 12 noon, Temple Place, London, UK
Комментариев нет:
Отправить комментарий