У меня есть класс, который обрабатывал данные и извлекал ссылку, электронную почту и 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
работало нормально, второе, а третье - нет, оно порождает ошибку выше, пожалуйста, кто-нибудь может помочь мне, что не так?
Вероятно, вы хотели использовать анонимную функцию. Переключите свой код:
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);
}
Parse error: syntax error, unexpected T_FUNCTION in C:\wamp\www\ln.php on line 29
Вот как я наконец достигаю этого.
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);
}
if_defined()
определения функций, и если вам абсолютно необходимо определить функции внутри функции / метода, которые вы будете вызывать несколько раз, используйтеif_defined()