Codeigniter preg_replace_callback - PullRequest
       7

Codeigniter preg_replace_callback

0 голосов
/ 11 февраля 2010

Я бы хотел, чтобы preg_replace_callback использовал библиотечную функцию из CodeIgniter в качестве обратного вызова.Моя текущая неудачная попытка следующая:

$content = preg_replace_callback('/href="(\S+)"/i',
    '$this->util->url_to_absolute("http://www.google.com","$matches[0]")',
    $content);

Но я не добился успеха.Я пытался использовать create_function, но я не могу заставить это работать.Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 11 февраля 2010

По состоянию на php 5.3

$that = $this;
$content = preg_replace_callback($patt, function($matches) use ($that) {
    return $that->util->url_to_absolute("http://www.google.com", $matches[1]);
}, $content);

//or
$that = $this->util;
$content = preg_replace_callback($patt, function($matches) use ($that) {
    return $that->url_to_absolute("http://www.google.com", $matches[1]);
}, $content);

//or
$callback = array($this->util, 'url_to_absolute');
$content = preg_replace_callback($patt, function($matches) use ($callback) {
    return call_user_func($callback, "http://www.google.com", $matches[1]);
}, $content);
1 голос
/ 11 февраля 2010

Это будет выглядеть примерно так:

$content = preg_replace_callback(
    '/href="(\S+)"/i',
    create_function(
        '$matches',
        'return $this->util->url_to_absolute("http://www.google.com","$matches[1]")'),
    $content);

Но проблема в том, что ссылка $ this не будет доступна внутри области обратного вызова, поэтому вам может потребоваться создать ее экземпляр внутри обратного вызова или использовать обратный вызов в свой собственный класс, например ::10000

class fred {

    function callback1($matches) {
       return $this->util->url_to_absolute("http://www.google.com","$matches[1]");
    }

    function dostuff($content) {
        $content = preg_replace_callback(
            '/href="(\S+)"/i',
            array($this, 'callback1'),
            $content);
        return $content;
    }
}

Предполагая, что класс fred и dostuff - это класс и метод, из которого вы пытаетесь вызвать его в данный момент,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...