Некоторые функции ООП в 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 двигается вперед, и, я предполагаю, что через пару версий появится множественное наследование классов, а соответственно много новых методов, функций и приемов. До скорого, дорогой читатель.

ссылка на оригинал статьи http://habrahabr.ru/post/201276/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *