2010-04-28 2 views
1

Je suis nouveau à PHP et l'expression régulière. J'allais répercutant quelques exemples en ligne et est venu avec cet exemple:Quel est le problème avec cette fonction PHP

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

à php.net mais à ma grande surprise, il ne fonctionne pas et continue de recevoir l'erreur:

PHP Parse error: parse error, unexpected T_FUNCTION 

Pourquoi obtenir erreur?

+1

quelle version de PHP vous exécutez ce sur? – codaddict

+0

5.2.1 version sur les fenêtres. – user325894

Répondre

6

Vous utilisez PHP Anonymous functions: fonctions qui ont sans nom. Lorsque j'exécute votre programme, je n'obtiens aucune erreur.

Peut-être que vous l'essayez sur un PHP < 5.3.

Les fonctions anonymes sont disponibles depuis PHP 5.3.0.

Si la version PHP crée le problème que vous pouvez ré-écrire le programme à pas utiliser fonctions anonymes:

<?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

votre nouveau programme fonctionne. Merci. – user325894

+0

@unicornaddict: le deuxième argument de 'preg_replace_callback' devrait être une chaîne dans ce cas particulier. – salathe

+0

@salathe: Merci de m'avoir signalé. Intéressant même ne pas citer travaillé ici avec un avis :). On dirait que OP n'a pas vu l'avis :) – codaddict

1

Utilisez-vous une version antérieure à PHP 5.3.0? Anonymous functions ne sont pas pris en charge dans les versions antérieures à celle-ci.

Vous pouvez vérifier votre version avec une page phpinfo.

2

Cet exemple est pour PHP 5.3. Vous utilisez probablement quelque chose de plus ancien (par exemple, PHP 5.2).

Essayez ceci:

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

Cela devrait fonctionner sur les versions pré-5.3:

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

Cordialement

RBO

Questions connexes