четверг, 7 ноября 2013 г.

[Из песочницы] Некоторые функции ООП в PHP, о которых молчат на Хабре


Вместо введения



Сегодня меня посетила мысль написать пост о ООП в 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:



Комментариев нет:

Отправить комментарий