Вызов сallback функции в классе

e_moon

Новичок
Вызов сallback функции в классе

Добрый день.
Решил освоить ООП и распределить функции по классам. И сразу же столкнулся с такой проблеммой: есть функция "request_detour" для обработки массива (заменяет всяку нецензурщину). Вне класса работает, а в классе не могу разобраться, как передать на нее ссылку.
PHP:
class Request_Scan
{
	function request_detour($v)
		{
			return is_array($v) ? array_map('Request_Scan::request_detour', $v) : (is_string($v) ? 
$this->request_processing($v) : $v);
		}
...
Warning: array_map() [function.array-map]: The first argument, 'Request_Scan::request_detour', should be either NULL or a valid callback
Вот собственно, не понимает ни "Request_Scan::request_detour", ни "$this->request_detour".
 

Steal_PHP

Новичок
внутри класса следовало бы использовать вместо Request_Scan::request_detour - self::request_detour
 

Zetruger

ivan.chistyakov.name
array($this, 'request_detour')
или
array('class_name', 'request_detour') для static методов

так по идеи должен выглядеть келбак
 

Zetruger

ivan.chistyakov.name
внутри класса следовало бы использовать вместо Request_Scan::request_detour - self::request_detour
в контексте автора ни то ни другое не подайдет
1 так как request_detour не статик
2 так как array_map понятия не имеет что такое self, да еще и с двойным двоеточием =)
 

e_moon

Новичок
Zetruger, не понял. Если вы имеете в виду array_map($this, 'request_detour'), возникает та же ошибка.
 

Zetruger

ivan.chistyakov.name
e_moon
я имею ввиду то что написал

смотри call_user_func
"Example 2. Using a class method"
 

e_moon

Новичок
Ясно. Просто странно как-то получаеться, что в классе такие траблы. Если вне класса - все ок.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
array_map( array('myclass','myMethod') , $value);
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
e_moon
так не нашло функцию
Все находит.
PHP:
<? 
Class myclass {
	function myclass(){
	}
	function myMethod($n){
		return $n*$n*$n;
	}
	
	function test(){
		$value = Array(1,2,3);
		print_r (array_map( array('myclass','myMethod') , $value));
	}
}
myclass::test();

$obj = new myclass();
$obj -> test();
?>
 

Steal_PHP

Новичок
Так неверно:
array_map(call_user_func(array('Request_Scan', 'request_detour')), $v);
а вот так array_map(array('Request_Scan', 'request_detour'), $v); должно работать
 

e_moon

Новичок
Steal_PHP, теперь просит
Warning: Missing argument 1 for request_detour().
Попробую сделать, как в примере Mr_Max, чтобы фуекция не ссылалась на саму себя.
 
Сверху