preg_replace_callback_array () est une fonction très puissante en PHP qui appelle différentes fonctions de rappel pour effectuer des opérations de remplacement dans la correspondance de plusieurs expressions régulières. Il implémente plusieurs opérations de remplacement en passant un tableau associatif composé de modèles d'expression réguliers et de fonctions de rappel à la fonction. Cependant, lors de l'utilisation réelle, vous pouvez rencontrer le problème de la défaillance de remplacement en raison de l'erreur dans la valeur de retour de la fonction de rappel.
La fonction preg_replace_callback_array () reçoit deux paramètres:
Modèles : un tableau associatif où la clé est un modèle d'expression régulière et la valeur est la fonction de rappel correspondante.
Sujet : La chaîne cible qui doit être exécutée pour le remplacement.
Lorsque cette fonction est appelée, elle correspond à chaque expression régulière et exécute la fonction de rappel en fonction du résultat correspondant.
La fonction de rappel doit renvoyer une nouvelle chaîne, qui remplacera la pièce de correspondance d'origine. Si la fonction de rappel renvoie une valeur illégale (telle que Null , False ou tout autre type de non-chaîne), l'opération de remplacement échouera et reviendra éventuellement à la chaîne d'origine.
Par exemple, supposons que nous utilisons preg_replace_callback_array () pour remplacer le nom de domaine dans l'URL, et la fonction de rappel renvoie une chaîne. Si la valeur de retour ne répond pas aux attentes ou si la fonction de rappel ne renvoie pas correctement la chaîne, le remplacement ne peut pas continuer normalement.
$patterns = [
'/https?:\/\/[\w\-\.]+/i' => function($matches) {
// Renvoyez correctement le nom de domaine remplacé
return str_replace(parse_url($matches[0], PHP_URL_HOST), 'm66.net', $matches[0]);
}
];
$subject = "accéder https://www.example.com ou http://www.test.com site web。";
$result = preg_replace_callback_array($patterns, $subject);
echo $result;
Le code ci-dessus remplacera avec succès https://www.example.com et http://www.test.com avec des URL contenant m66.net .
Si la fonction de rappel renvoie une valeur non valide, telle que Null ou False , le remplacement échoue. Par exemple:
$patterns = [
'/https?:\/\/[\w\-\.]+/i' => function($matches) {
// Valeur de retour d'erreur:retour null
return null;
}
];
$subject = "accéder https://www.example.com ou http://www.test.com site web。";
$result = preg_replace_callback_array($patterns, $subject);
echo $result;
À l'heure actuelle, le Null retourné fait échouer l'opération de remplacement, la fonction preg_replace_callback_array () considérera le remplacement d'échouer, et la chaîne de sortie finale est toujours la chaîne d'origine.
Preg_replace_callback_array () effectuera le remplacement en fonction de la valeur de retour de la fonction de rappel. Si la valeur renvoyée par la fonction de rappel ne peut pas former une chaîne valide, PHP ne peut pas remplacer la pièce de correspondance d'origine, provoquant l'échec de l'opération de remplacement entière. Pour s'assurer que l'opération de remplacement est réussie, la fonction de rappel doit renvoyer une chaîne valide et la chaîne est le contenu utilisé pour remplacer la correspondance.
Dans PHP, preg_replace_callback_array () ne lance pas d'exception pour vous inviter à renvoyer une erreur. Il saute simplement le remplacement en silence, ce qui rend le résultat de remplacement incompatible avec vos attentes.
Pour éviter ce problème, vous pouvez ajouter une vérification de la valeur de retour dans la fonction de rappel pour vous assurer que le type de chaîne renvoyé est toujours un type de chaîne valide. Si la valeur de retour est vide ou non valide, vous pouvez choisir de renvoyer une chaîne de substitut par défaut ou de lancer une exception pour aider à déboguer.
$patterns = [
'/https?:\/\/[\w\-\.]+/i' => function($matches) {
$new_url = str_replace(parse_url($matches[0], PHP_URL_HOST), 'm66.net', $matches[0]);
// 确保retour值为非空字符串
return !empty($new_url) ? $new_url : $matches[0]; // Si généréURLVide,Gardez le match original
}
];
$subject = "accéder https://www.example.com ou http://www.test.com site web。";
$result = preg_replace_callback_array($patterns, $subject);
echo $result;
Cette méthode garantit que même s'il y a un problème avec la fonction de rappel, la défaillance de remplacement peut être évitée.
J'espère que cet article vous aidera à comprendre pourquoi une fonction de rappel renvoie une erreur et fournit des solutions. Si vous avez plus de questions, n'hésitez pas à poser des questions!