Неустранимая ошибка: (в классе) Невозможно повторно объявить replaceurl () (ранее объявлено в www / link.php

0

У меня есть класс, который обрабатывал данные и извлекал ссылку, электронную почту и hashtag, проблема, с которой я сталкиваюсь, - это когда я вызывал класс более одного раза, он дает ошибку. Fatal error: Cannot redeclare replaceurl() (previously declared in C:\wamp\www\ln.php:13)

Вот класс

 class HtmlLinkUtility
    {
        public static $BaseDomain = null;
        public static function ReplaceEmailToHtmlLink($source)
        {
            return preg_replace('/([_.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})/i',
                '<a href="mailto:\1">\1</a>', $source);
        }

        public static function ReplaceUrlToHtmlLink($source)
        {
            function replaceUrl($groups) {
                $url = $groups[1];
                return '<a href="' . $url . '"' . (strpos($url, HtmlLinkUtility::$BaseDomain) !== false ?
                    ' target="_blank"' : '') . '>' . $url . '</a>';
            }

            return preg_replace_callback('!(((f|ht){1}(tp://|tps)|(www.))[-a-zA-Z0-9@:%_+.~#?&//=]+)!i',
                replaceUrl, $source);
        }
        public static function Htags($source){ 
        $regex = "/#+([a-zA-Z0-9_]+)/"; 
        $source = preg_replace($regex, '<a href="tag.php?tag=$1">$0</a>', $source); 
        return $source; 
        }

        public static function ReplaceTextDataToLinks($source, $baseDomain)
        {
            self::$BaseDomain = $baseDomain;
            return self::Htags(self::ReplaceUrlToHtmlLink(self::ReplaceEmailToHtmlLink($source)));
        }
    }

echo  HtmlLinkUtility::ReplaceTextDataToLinks("[email protected]<br />http://www.google.com/<br />http://www.test.com/ #madekir", "ivotism.com");
echo  HtmlLinkUtility::ReplaceTextDataToLinks("[email protected]<br />http://www.google.com/<br />http://www.test.com/ #madekir", "ivotism.com");
echo  HtmlLinkUtility::ReplaceTextDataToLinks("[email protected]<br />http://www.google.com/<br />http://www.test.com/ #madekir", "ivotism.com");

Первое echo работало нормально, второе, а третье - нет, оно порождает ошибку выше, пожалуйста, кто-нибудь может помочь мне, что не так?

  • 1
    Неважно, что вы вложили определение своей функции в метод, это все же просто определение функции, которое будет создано в глобальной области видимости, и каждый вызов HtmlLinkUtility :: ReplaceUrlToHtmlLink () будет пытаться определить его снова ... if_defined() определения функций, и если вам абсолютно необходимо определить функции внутри функции / метода, которые вы будете вызывать несколько раз, используйте if_defined()
  • 1
    Вы просто хотели использовать функцию anom: просто сделайте preg_replace_callback ($ pattern, function () {// replace logic}, $ subject);
Показать ещё 2 комментария
Теги:

2 ответа

0
Лучший ответ

Вероятно, вы хотели использовать анонимную функцию. Переключите свой код:

    public static function ReplaceUrlToHtmlLink($source)
    {

       return preg_replace_callback('!(((f|ht){1}(tp://|tps)|(www.))[-a-zA-Z0-9@:%_+.~#?&//=]+)!i', function ($groups) {
            $url = $groups[1];
            return '<a href="' . $url . '"' . (strpos($url, HtmlLinkUtility::$BaseDomain) !== false ?' target="_blank"' : '') . '>' . $url . '</a>';
        }, $source);
    }
  • 0
    Кажется, он не работает, но пытается выяснить, почему он не работает.
  • 0
    Я получил эту ошибку, когда я изменил и запустил код, Parse error: syntax error, unexpected T_FUNCTION in C:\wamp\www\ln.php on line 29
Показать ещё 2 комментария
0

Вот как я наконец достигаю этого.

 public static function ReplaceUrlToHtmlLink($source)
        {
            if (!function_exists("replaceUrl")){
            function replaceUrl($groups) {
                $url = $groups[1];
                return '<a href="' . $url . '"' . (strpos($url, HtmlLinkUtility::$BaseDomain) !== false ?
                    ' target="_blank"' : '') . '>' . $url . '</a>';
            }
            }

            return preg_replace_callback('!(((f|ht){1}(tp://|tps)|(www.))[-a-zA-Z0-9@:%_+.~#?&//=]+)!i',
                replaceUrl, $source);
        }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню