致命错误:(在课堂上)无法重新声明replaceurl()(之前在www / link.php中声明)

时间:2014-12-10 21:59:17

标签: php

我有一个处理数据并提取链接,电子邮件和主题标签的类,我遇到的问题是当我多次调用该类时,它会出现错误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("test@test.com<br />http://www.google.com/<br />http://www.test.com/ #madekir", "ivotism.com");
echo  HtmlLinkUtility::ReplaceTextDataToLinks("test@test.com<br />http://www.google.com/<br />http://www.test.com/ #madekir", "ivotism.com");
echo  HtmlLinkUtility::ReplaceTextDataToLinks("test@test.com<br />http://www.google.com/<br />http://www.test.com/ #madekir", "ivotism.com");

第一个echo工作正常,第二个和第三个不会,它产生上面的错误,请有人帮帮我,什么错?

2 个答案:

答案 0 :(得分:1)

您可能想要使用匿名函数。 将代码切换到:

    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);
    }

答案 1 :(得分: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);
        }