как в preg_replace_callback() нормально "впихнуть" callback внутрь класса.

ys

отодвинутый новичок
как в preg_replace_callback() нормально "впихнуть" callback внутрь класса.

Добрый день.

Разбираю строки, используя callback функцию для составления результатов,
но не хочу "гадить" в глобальное пространство имен.

Пример извратокода:

Код:
class Someclass {

       public function _linecallback($arg=array()) {
                ..... processing ....
                return $retval;
        }

        public function processLine($line, $regexp)
        {
                $GLOBALS['abcdefgh'] = $this;
                $line = preg_replace_callback($regexp,
                        create_function(
                                '$matches',
                                'return $GLOBALS["abcdefgh"]->_linecallback($matches);'
                        ),
                        $line);
        }
} /* End of class Someclass */
Вот думаю, как бы избавиться от GLOBALS, чтоб не гадить за пределы класса.
Основной косяк, что в пределах create_function, собственно, свое пространство имен, а использовать явно вызов функции класса не получиться, т.к. ни $this, ну даже, на худой конец, self:: туда не пихнуть.

Как следствие, _linecallback() так-же не сдалать приватным членом класса :(

Rem: Вариант с preg_replace и модификатором "/e" проходил, но он не очень подходит..

Ни кто не решал подобную задачу?
 

ys

отодвинутый новичок
zerkms

preg_replace_callback() свои аргументы пихает в callback, если дорисовывать свое - ругается, что не валидный callback .
 

MiksIr

miksir@home:~$
я мож тоже невнимательный, но так и не понял, почему нельзя
$line = preg_replace_callback($regexp, array($this, '_linecallback'), $line)
 

ys

отодвинутый новичок
Всем спасибо за пинки в нужном направлении!

С праздником!
 

Lightning

Трудоголик
MiksIr, по-моему потому, что preg_replace_callback это не call_user_func_array.
Какого фига? У меня такое работает.

-~{}~ 08.05.09 21:05:

Вот нашел в своем коде:
PHP:
$this->sql .= preg_replace_callback('/(%d|%s|%f|%%|%b)/', Array($this,'format_replace'), $sql);
 
Сверху