2010-09-07 25 views
7

Merhaba Aşağıdaki kodu kullanıyorum ama ikinci satır için" beklenmedik bir T_FUNCTION "sözdizimi hatası alıyorum. Baska öneri?

preg_replace_callback("/\\[LINK\=(.*?)\\\](.*?)\\[\/LINK\\]/is", 
function (array $matches) { 
    if (filter_var($matches[1], FILTER_VALIDATE_URL)) 
     return '<a href="'. 
      htmlspecialchars($matches[1], ENT_QUOTES). 
      '" target="_blank">'. 
      htmlspecialchars($matches[2])."</a>"; 
    else 
     return "INVALID MARKUP"; 
}, $text); 
+0

PHP sürümünüz kapanıyor mu? –

+0

@Mike B. PHP 5.2 kullanıyorum, sanırım öyle değil. – Mike

+3

En azından php 5.3'e ihtiyacınız var: http://php.net/manual/en/functions.anonymous.php – jigfox

cevap

20

Bu, PHP'niz 5.3'ten eski olduğunda gerçekleşir. Anonim işlev desteği 5.3'e kadar mevcut değildi, bu yüzden PHP, bu gibi parametreler olarak aktarılan işlev imzalarını tanımayacaktır.

Bir fonksiyonu geleneksel yol oluşturmak ve bunun yerine ismini geçmesi gerekecek

(Ben mesela link_code() kullanın) : diziler için tür ipucu desteklendiğinden

function link_code(array $matches) { 
    if (filter_var($matches[1], FILTER_VALIDATE_URL)) 
     return '<a href="'. 
      htmlspecialchars($matches[1], ENT_QUOTES). 
      '" target="_blank">'. 
      htmlspecialchars($matches[2])."</a>"; 
    else 
     return "INVALID MARKUP"; 
} 

preg_replace_callback("/\\[LINK\=(.*?)\\\](.*?)\\[\/LINK\\]/is", 'link_code', $text); 

Ayrıca array $matches bir sorun değildir PHP 5.2'de.

+0

Mükemmel, teşekkürler. – Mike

İlgili konular