Semasa mengerjakan projek WordPress dengan PHP 8.x, anda mungkin menghadapi ralat berikut:
Ralat maut: Uncaught PHP_CodeSnifferExceptionsRuntimeException: trim(): Melepasi null kepada parameter #1 ($rentetan) rentetan jenis ditamatkan dalam /path/...
Ralat ini berlaku disebabkan amaran penamatan dalam PHP 8.x, yang menghantar null ke fungsi trim() tidak lagi dibenarkan. Secara khusus, isu ini timbul dalam hiduan Standard Pengekodan WordPress (WPCS), sebahagian daripada persediaan PHP_CodeSniffer. Sehingga tarikh penulisan ini, walaupun dengan versi terkini PHP_CodeSniffer dan Piawaian Pengekodan WordPress, isu ini berterusan.
PHP_CodeSniffer ialah alat yang membantu pembangun mengekalkan standard pengekodan dengan menyemak kod PHP mereka untuk pelanggaran peraturan tertentu. Piawaian Pengekodan WordPress (WPCS) menyediakan satu set garis panduan untuk menulis kod yang konsisten dan bersih dalam projek WordPress. Ralat yang dinyatakan di atas biasanya menunjukkan bahawa coretan kod tidak mematuhi piawaian ini disebabkan oleh perubahan dalam tingkah laku PHP.
Untuk membetulkannya, kami boleh mengubah suai fail yang menyebabkan isu itu secara manual, cari baris tempat trim() dipanggil dan kemas kini kod untuk memastikan nilai nol dikendalikan dengan betul semasa memanggil trim().
Contohnya, dalam fail vendor/wp-coding-standards/wpcs/WordPress/Sniffs/NamingConventions/PrefixAllGlobalsSniff.php, cari baris 280 dan gantikan baris berikut:
// this $cl_prefixes = trim( PHPCSHelper::get_config_data( 'prefixes' ); // to this $cl_prefixes = is_null( PHPCSHelper::get_config_data( 'prefixes' ) ) ? '' : trim( PHPCSHelper::get_config_data( 'prefixes' ) );
Walau bagaimanapun, seperti dalam banyak keputusan dalam pembangunan perisian, hanya kerana anda boleh melakukan ini, tidak bermakna anda harus.
Walaupun pendekatan sebelumnya mungkin membetulkan ralat, adalah penting untuk diingat bahawa mengubah suai fail vendor bukanlah penyelesaian yang mampan. Perubahan akan hilang setiap kali anda mengemas kini kebergantungan anda melalui Komposer.
Pendekatan yang lebih baik, maka, adalah dengan mencipta fail tampalan.
Berikut ialah panduan langkah demi langkah tentang cara membuat dan menggunakan tampalan untuk isu itu
Penyelesaian yang lebih mantap ialah membuat fail tampalan. Kaedah ini membolehkan anda menggunakan perubahan anda secara automatik setiap kali anda memasang atau mengemas kini kebergantungan anda.
Fail tampalan ialah fail teks yang mengandungi perbezaan antara dua versi fail—pada asasnya syot kilat "sebelum" dan "selepas".
Dalam direktori projek anda, cipta folder untuk menyimpan fail tampalan:
mkdir -p tampalan
Di dalam patch/ folder, buat fail tampalan baharu yang dipanggil fix-null-trim.patch. Anda boleh melakukan ini dengan editor teks anda:
tampalan sentuh/fix-null-trim.patch
Buka fix-null-trim.patch dalam editor teks anda dan tambahkan kandungan berikut:
--- a/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/NamingConventions/PrefixAllGlobalsSniff.php +++ b/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/NamingConventions/PrefixAllGlobalsSniff.php @@ -280,7 +280,7 @@ // Original code with `trim()` // Update this line: - $cl_prefixes = trim( PHPCSHelper::get_config_data( 'prefixes' ) ); + $cl_prefixes = is_null( PHPCSHelper::get_config_data( 'prefixes' ) ) ? '' : trim( PHPCSHelper::get_config_data( 'prefixes' ) ); --- a/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/WP/I18nSniff.php +++ b/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/WP/I18nSniff.php @@ -194,7 +194,7 @@ // Original code with `trim()` // Update this line: - $cl_text_domain = trim( PHPCSHelper::get_config_data( 'text_domain' ) ); + $cl_text_domain = is_null(PHPCSHelper::get_config_data( 'text_domain' )) ? '' : trim( PHPCSHelper::get_config_data( 'text_domain' ) ); --- a/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/Sniff.php +++ b/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/Sniff.php @@ -1144,7 +1144,7 @@ // Original code with `trim()` // Update this line: - $cl_supported_version = trim( PHPCSHelper::get_config_data( 'minimum_supported_wp_version' ) ); + $cl_supported_version = is_null(PHPCSHelper::get_config_data( 'minimum_supported_wp_version' )) ? '' : trim( PHPCSHelper::get_config_data( 'minimum_supported_wp_version' ) );
Tampalan ini memberitahu Komposer untuk menggantikan baris bermasalah dalam PrefixAllGlobalsSniff.php dengan versi yang lebih selamat yang menggunakan pengendali penggabungan nol (??) untuk mengelak menghantar null kepada memangkas().
Seterusnya, anda perlu mengarahkan Komposer untuk menggunakan tampung ini secara automatik apabila anda memasang atau mengemas kini kebergantungan anda.
Buka fail composer.json projek anda. Tambahkan konfigurasi berikut di bawah bahagian "tambahan". Jika bahagian "tambahan" belum wujud, anda perlu menciptanya.
json "extra": { "patches": { "wp-coding-standards/wpcs": { "Fix null trim() issue": "patches/fix-null-trim.patch" } } }
Ini memberitahu Komposer untuk menggunakan fail fix-null-trim.patch pada pakej wp-coding-standards/wpcs apabila ia memasang atau mengemas kini kebergantungan.
Untuk menggunakan patch melalui Composer, anda memerlukan plugin composer-patches. Jalankan arahan berikut untuk memasang:
komposer memerlukan cweagans/tampalan komposer
Kini, anda boleh menggunakan tampung dengan menjalankan arahan berikut:
pemasangan komposer
Semasa pemasangan, Komposer akan menggunakan tampalan dari patch/ folder ke fail PrefixAllGlobalsSniff.php.
Dengan mencipta dan menggunakan fail tampalan, anda memastikan bahawa pembetulan anda berterusan merentas kemas kini Komposer, mematuhi amalan terbaik dalam pembangunan perisian. Pantau kemas kini pada PHP_CodeSniffer dan Piawaian Pengekodan WordPress secara kerap, kerana isu ini mungkin dapat diselesaikan dalam keluaran akan datang. Pendekatan proaktif ini bukan sahaja meningkatkan kualiti kod tetapi juga memperbaik aliran kerja pembangunan anda dalam persekitaran PHP 8.x.
Saya telah berkongsi fail tampalan dalam Gist ini. Jangan ragu untuk menggunakannya sebagai rujukan untuk melaksanakan pembetulan serupa dalam projek anda!
Atas ialah kandungan terperinci Membetulkan Ralat PHP_CodeSniffer Null Trim() dalam Piawaian Pengekodan WordPress. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!