Ekspresi biasa boleh menakutkan, terutamanya apabila bekerja dengan menangkap kumpulan dan penggantian. Mari kita tafsirkan tugas gantian daripada preg_replace() menggunakan pengubah suai '/e':
public static function camelize($word) { return preg_replace('/(^|_)([a-z])/e', 'strtoupper("\2")', $word); }
Di sini, matlamatnya ialah untuk menggunakan huruf besar berikutan '^' (permulaan rentetan) atau '_' ( garis bawah).
Pengubah suai '/e' menilai rentetan gantian sebagai kod PHP. '2' merujuk kepada kumpulan yang ditangkap kedua, iaitu huruf kecil berikutan '^' atau '_'. Walau bagaimanapun, pengubah suai ini telah ditamatkan atas sebab keselamatan.
preg_replace_callback() menawarkan alternatif yang lebih selamat dengan menyediakan fungsi panggil balik dan bukannya rentetan gantian:
return preg_replace_callback('/(^|_)([a-z])/', function($matches) { return strtoupper($matches[2]); }, $word);
Fungsi tanpa nama mengambil tatasusunan padanan sebagai hujah. Di sini, $matches[1] mewakili '^' atau '_' dan $matches[2] huruf yang hendak dijadikan huruf besar.
Perhatikan bahawa '/e' pengubah suai perlu dialih keluar apabila menggunakan preg_replace_callback(). Corak di atas memudahkan kepada:
return preg_replace_callback('/(^|_)([a-z])/', function($matches) { return strtoupper($matches[2]); }, $word);
Fungsi tanpa nama hanya mempunyai akses kepada pembolehubah yang diimport secara eksplisit menggunakan kata kunci 'guna'.
Atas ialah kandungan terperinci Bagaimana untuk Menggantikan Pengubahsuai `preg_replace()` `/e` PHP dengan Selamat dengan `preg_replace_callback()`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!