2010-04-28 201 views
1

我是PHP和正則表達式的新手。我正想thorugh一些網上的例子,來到這個例子:這個PHP函數有什麼問題

<?php 
echo preg_replace_callback('~-([a-z])~', function ($match) { 
    return strtoupper($match[1]); 
}, 'hello-world'); 
// outputs helloWorld 
?> 

php.net但讓我吃驚不工作,並不斷收到錯誤:

PHP Parse error: parse error, unexpected T_FUNCTION 

爲什麼出現錯誤?

+1

的PHP版本,你運行這個嗎? – codaddict 2010-04-28 12:46:08

+0

5.2.1在Windows上的版本。 – user325894 2010-04-28 12:51:10

回答

6

您正在使用PHP的Anonymous functions:函數有沒有名稱

當我運行你的程序時,我得到沒有錯誤。可能是你正在嘗試一個PHP < 5.3

匿名函數自PHP 5.3.0起可用。

如果PHP版本創建的問題,你可以在程序重新編寫到不使用匿名函數爲:

<?php 

// a callback function called in place of anonymous function. 
echo preg_replace_callback('~-([a-z])~','fun', 'hello-world'); 

// the call back function. 
function fun($match) { 
    return strtoupper($match[1]); 
} 

?> 
+0

您的新程序有效。謝謝。 – user325894 2010-04-28 12:51:53

+0

@unicornaddict:在這種特殊情況下,'preg_replace_callback'的第二個參數應該是一個字符串。 – salathe 2010-04-28 13:12:03

+0

@salathe:感謝指點。有趣的是,即使沒有引用在這裏通知:)。看起來OP也沒有看到通知:) – codaddict 2010-04-28 13:15:51

2

這個例子是PHP 5.3。您可能會使用較舊的東西(例如PHP 5.2)。

試試這個:

<?php 
function callback($match) { 
    return strtoupper($match[1]); 
} 
echo preg_replace_callback('~-([a-z])~', 'callback', 'hello-world'); 
1

這應該預先5.3版本的工作:

echo preg_replace_callback(
     '/-([a-z])/',  
     create_function('$arg', 'return strtoupper($arg[1]);'), 
     'hello-world' 
    ); 

問候

RBO