PHP-CS-Fixer adalah alat sumber terbuka yang dapat menegakkan, dan mendeteksi pelanggaran, gaya pengkodean PHP. Dengan aturan yang telah ditentukan sebelumnya, ini memungkinkan Anda memiliki gaya pengkodean ketat yang diberlakukan oleh alat sehingga Anda dapat meluangkan waktu untuk hal-hal yang lebih penting
Contoh aturan
Berikut adalah beberapa contoh hal-hal yang dapat dilakukan PHP-CS-Fixer ke basis kode Anda
Aturan. is_null
Mengganti ekspresi
// before...
$length = strlen($request->post('slug'));
// after...
$length = mb_strlen($request->post('slug'));
_9 dengan// before...
- if (!$user->is_active) {
//
}
// after...
if (! $user->is_active) {
//
}
0// before...
if (is_null($account->closed_at)) {
//
}
// after...
if ($account->closed_at === null) {
//
}
Aturan. mb_str_functions
Ganti fungsi non-multibyte-safe dengan fungsi mb yang sesuai
// before...
$length = strlen($request->post('slug'));
// after...
$length = mb_strlen($request->post('slug'));
Aturan. not_operator_with_successor_space
Operator NOT logis
// before...
- if (!$user->is_active) {
//
}
// after...
if (! $user->is_active) {
//
}
1 harus memiliki satu spasi tambahan// before...
- if (!$user->is_active) {
//
}
// after...
if (! $user->is_active) {
//
}
_Aturan main yang tersedia sangat lengkap dan selalu bertambah jumlahnya. Anda dapat melihat daftar lengkap aturan yang tersedia di readme proyek. Anda mungkin juga ingin memeriksa konfigurasi PHP-CS-Fixer, yang merupakan situs yang memberikan contoh tentang apa yang dilakukan setiap aturan, jika deskripsinya tidak jelas
Tip panas. Selain memperbaiki gaya, sering kali dapat digunakan sebagai alat pemutakhiran. PHPUnit 8 menambahkan tipe pengembalian
// before...
- if (!$user->is_active) {
//
}
// after...
if (! $user->is_active) {
//
}
_2 ke beberapa metode. Menjalankan aturan// before...
- if (!$user->is_active) {
//
}
// after...
if (! $user->is_active) {
//
}
3 PHP-CS-Fixer pada direktori// before...
- if (!$user->is_active) {
//
}
// after...
if (! $user->is_active) {
//
}
4 dapat langsung memutakhirkan suite pengujian Anda, membuatnya kompatibel dengan perubahan iniBagikan aturan Anda
Saya menggunakan PHP-CS-Fixer di seluruh proyek saya dan memiliki seperangkat aturan yang menentukan gaya. Sampai sekarang, saya telah menyalin dan menempelkan aturan saya ketika saya memulai proyek baru, dan ketika aturan baru keluar, saya kemudian harus memperbarui konfigurasi saya di proyek saya yang sudah ada. Ini bukan alur kerja yang ideal karena Anda dapat dengan mudah lupa untuk memperbarui proyek tertentu, dan ini adalah sekumpulan pekerjaan manual
Ternyata adalah mungkin untuk membagikan aturan Anda di beberapa proyek dan tim sehingga
// before...
- if (!$user->is_active) {
//
}
// after...
if (! $user->is_active) {
//
}
5 akan memiliki semua proyek Anda menggunakan versi terbaru dari kumpulan aturan Anda pada waktu tertentuScaffolding repo
Kami akan membangun repo git untuk menampung set aturan berbagi kami. Untuk memulai, kami akan menginisialisasi repo git lokal dan membuat file yang diperlukan
$ mkdir php-styles
$ cd php-styles
$ git init
$ echo "/composer.lock
/vendor
/.php_cs.cache" >> .gitignore
$ mkdir src
$ touch src/rules.php src/helpers.php composer.json
Menentukan aturan Anda
Seperti yang telah saya sebutkan sebelumnya, ada seperangkat aturan yang ekstensif, dan rilis baru terkadang berisi aturan baru, jadi menurut saya sangat berguna untuk melacak rilis PHP-CS-Fixer mana yang terakhir Anda tinjau aturan yang tersedia. Ini berarti ketika Anda mengupgrade ke versi yang lebih baru, Anda akan mengetahui rilis untuk mencari aturan baru yang mungkin ingin Anda masukkan ke dalam kumpulan aturan bersama Anda. Saya suka menambahkan rilis ulasan terakhir tepat di bagian atas file
// before...
- if (!$user->is_active) {
//
}
// after...
if (! $user->is_active) {
//
}
6<?php
// last reviewed: v2.16.3 Yellow Bird
Selanjutnya, kami ingin membuat file
// before...
- if (!$user->is_active) {
//
}
// after...
if (! $user->is_active) {
//
}
6 kami mengembalikan array yang berisi kumpulan aturan kami. Menyimpan aturan dalam file terpisah sangat berguna karena daftarnya bisa sangat panjang, tergantung pada spesifikasi Anda. Ini juga memungkinkan pengembang lain untuk menarik kumpulan aturan Anda dan menggabungkannya dengan milik mereka sendiri, misalnya, jika Anda ingin menarik standar pengkodean Laravel dan menggabungkannya dengan beberapa standar tambahan tim Anda<?php
// last reviewed: v2.16.3 Yellow Bird
return [
'@PSR2' => true,
'array_syntax' => ['syntax' => 'short'],
'final_class' => false,
'new_with_braces' => true,
// ...
];
PHP-CS-Fixer hadir dengan beberapa set aturan yang telah ditentukan sebelumnya. Semua aturan yang terkait dengan standar PSR-2 semuanya digabungkan ke dalam kumpulan aturan
// before...
- if (!$user->is_active) {
//
}
// after...
if (! $user->is_active) {
//
}
8. Hal ini memungkinkan kami untuk ikut serta dalam standar tanpa harus menentukan setiap aturan satu per satuBeberapa aturan memiliki opsi yang terkait dengannya. Aturan
// before...
- if (!$user->is_active) {
//
}
// after...
if (! $user->is_active) {
//
}
9 memungkinkan Anda untuk menentukan apakah Anda ingin sintaks array pendek atau panjangAturan lain ditentukan dalam daftar dengan menggunakan namanya dan nilai boolean, seperti yang terlihat pada aturan
$ mkdir php-styles
$ cd php-styles
$ git init
$ echo "/composer.lock
/vendor
/.php_cs.cache" >> .gitignore
$ mkdir src
$ touch src/rules.php src/helpers.php composer.json
0. Meskipun Anda dapat menghilangkan boolean, saya ingin memasukkannya untuk konsistensi, jadi setiap item dalam larik adalah pasangan$ mkdir php-styles
$ cd php-styles
$ git init
$ echo "/composer.lock
/vendor
/.php_cs.cache" >> .gitignore
$ mkdir src
$ touch src/rules.php src/helpers.php composer.json
1, jadi saya tahu saya telah menyisih dari aturan tertentu secara eksplisitMetode pembantu
Untuk membuat penggunaan aturan bersama Anda tidak menyakitkan di seluruh proyek Anda, kami akan membuat fungsi pembantu. Mungkin tidak masuk akal mengapa ini ada dulu, tapi ikuti terus, dan semuanya akan menyatu
Untuk memastikan fungsi tidak bertentangan dengan fungsi global lainnya dalam proyek Anda atau dependensinya, sebaiknya letakkan fungsi tersebut di namespace. Buka file
$ mkdir php-styles
$ cd php-styles
$ git init
$ echo "/composer.lock
/vendor
/.php_cs.cache" >> .gitignore
$ mkdir src
$ touch src/rules.php src/helpers.php composer.json
_2 dan tentukan ruang nama yang masuk akal untuk konteks Anda<?php
namespace TiMacDonald;
Sekarang kita perlu mendefinisikan tanda tangan metode. Metode ini akan menerima turunan dari
$ mkdir php-styles
$ cd php-styles
$ git init
$ echo "/composer.lock
/vendor
/.php_cs.cache" >> .gitignore
$ mkdir src
$ touch src/rules.php src/helpers.php composer.json
_3 dan juga serangkaian aturan yang akan memungkinkan proyek mengidentifikasi aturan tambahan yang diberlakukan berdasarkan proyek per proyek. Biasanya, saya akan mengatakan bahwa kami menginginkan konsistensi dan tidak boleh mengizinkan setiap proyek mengubah kumpulan aturan bersama – tetapi saya di sini bukan untuk memberi tahu Anda apa yang harus dilakukan, jadi kami akan membiarkan Anda melakukannya, tetapi Anda selalu dapat menghapusnya<?php
namespace TiMacDonald;
use PhpCsFixer\Config;
use PhpCsFixer\Finder;
function styles(Finder $finder, array $rules = []): Config {
//
}
Luar biasa. Itu datang bersama dengan baik. Hal terakhir sekarang adalah mengisi isi fungsi helper
<?php
namespace TiMacDonald;
use PhpCsFixer\Config;
use PhpCsFixer\Finder;
function styles(Finder $finder, array $rules = []): Config {
$rules = array_merge(require __DIR__.'/rules.php', $rules);
return Config::create()
->setFinder($finder)
->setRiskyAllowed(true)
->setRules($rules);
}
$ mkdir php-styles
$ cd php-styles
$ git init
$ echo "/composer.lock
/vendor
/.php_cs.cache" >> .gitignore
$ mkdir src
$ touch src/rules.php src/helpers.php composer.json
_4 adalah bagaimana PHP-CS-Fixer akan mengetahui di mana mencari file PHP yang ingin Anda perbaiki. Kami menunda keputusan ini untuk proyek, karena masing-masing mungkin memiliki struktur direktori yang berbeda, mis. g. , proyek Laravel dibandingkan dengan paket LaravelAturan berisiko
Di dalam tubuh fungsi
$ mkdir php-styles
$ cd php-styles
$ git init
$ echo "/composer.lock
/vendor
/.php_cs.cache" >> .gitignore
$ mkdir src
$ touch src/rules.php src/helpers.php composer.json
5 Anda dapat melihat kami memberi tahu konfigurasi untuk mengizinkan aturan "berisiko" dengan panggilan ke$ mkdir php-styles
$ cd php-styles
$ git init
$ echo "/composer.lock
/vendor
/.php_cs.cache" >> .gitignore
$ mkdir src
$ touch src/rules.php src/helpers.php composer.json
6. Anda harus membaca dokumentasi dan memahami bagaimana aturan berisiko dapat memengaruhi proyek Anda. Sebagai contoh, kita akan melihat aturan$ mkdir php-styles
$ cd php-styles
$ git init
$ echo "/composer.lock
/vendor
/.php_cs.cache" >> .gitignore
$ mkdir src
$ touch src/rules.php src/helpers.php composer.json
7. Jika Anda membaca dokumentasi PHP di$ mkdir php-styles
$ cd php-styles
$ git init
$ echo "/composer.lock
/vendor
/.php_cs.cache" >> .gitignore
$ mkdir src
$ touch src/rules.php src/helpers.php composer.json
8 Anda akan mencatatnyaimplode() dapat, karena alasan historis, menerima parameternya dalam urutan apa pun. Untuk konsistensi dengan meledak(), bagaimanapun, tidak digunakan lagi untuk tidak menggunakan urutan argumen yang terdokumentasi
Ini berarti bahwa kedua panggilan implode ini akan memiliki hasil yang sama
<?php
implode($array, ',');
implode(',', $array);
Aturan
$ mkdir php-styles
$ cd php-styles
$ git init
$ echo "/composer.lock
/vendor
/.php_cs.cache" >> .gitignore
$ mkdir src
$ touch src/rules.php src/helpers.php composer.json
_7 akan mengatur ulang argumen menjadi urutan yang terdokumentasi, tetapi jika proyek Anda telah mendefinisikan ulang perilaku<?php
// last reviewed: v2.16.3 Yellow Bird
0 untuk mengharapkan parameter dalam urutan yang salah, dengan beberapa cara seperti runkit, mengubah urutannya dapat merusak kode AndaJadi harap baca apa yang dilakukan setiap aturan berisiko dan pahami cara kerjanya sebelum Anda menambahkannya ke kumpulan aturan Anda
komposer. json
Untuk menarik paket ke dalam proyek kami, kami perlu mengisi file
<?php
// last reviewed: v2.16.3 Yellow Bird
1 kami. Saya merekomendasikan menjalankan pemeriksaan gaya dalam Continuous Integration (C. I. ), jadi saya akan menyertakan PHP-CS-Fixer secara lokal (Anda juga dapat mengunduh PHP-CS-Fixer sebagai file Phar jika Anda memiliki konflik paket)Buka file
<?php
// last reviewed: v2.16.3 Yellow Bird
_1 dan pastikan untuk menetapkan<?php
// last reviewed: v2.16.3 Yellow Bird
3 unik yang masuk akal bagi Anda// before...
$length = strlen($request->post('slug'));
// after...
$length = mb_strlen($request->post('slug'));
0Mendorong ke penyedia
Langkah terakhir dalam menyiapkan repositori kami adalah mendorongnya ke solusi git yang dihosting. Buat repositori di penyedia pilihan Anda dan tambahkan sebagai asal ke repo lokal Anda. Saya akan menggunakan GitHub
// before...
$length = strlen($request->post('slug'));
// after...
$length = mb_strlen($request->post('slug'));
_1Kami sekarang memiliki paket aturan bersama yang tersedia di GitHub. Selamat
Mengkonsumsi aturan bersama Anda
Sekarang kami sedikit mengganti persneling untuk fokus pada bagaimana Anda dapat menggunakan aturan bersama baru Anda di proyek lain. Tutup repo aturan bersama Anda dan buka proyek tempat Anda ingin menggunakannya. Ada beberapa penyiapan awal, tetapi setelah Anda melakukannya, hanya
// before...
- if (!$user->is_active) {
//
}
// after...
if (! $user->is_active) {
//
}
5 yang Anda perlukanMemerlukan repositori Anda
Composer memungkinkan kita untuk meminta repositori dari platform Git yang dihosting, tanpa harus mengirimkannya ke Packagist. Mengingat repo semacam ini kemungkinan besar bersifat internal, tidak banyak keuntungan yang didapat dengan menambahkannya ke Packagist
Untuk mewujudkannya, tambahkan nama paket Anda secara manual ke proyek
<?php
// last reviewed: v2.16.3 Yellow Bird
5 blok. Saya tidak perlu mengunci gaya saya ke versi tertentu, jadi saya hanya menggunakan<?php
// last reviewed: v2.16.3 Yellow Bird
6 yang berarti gaya terbaru akan selalu ditarik. Namun, Anda dapat membuat versi gaya Anda – tetapi itu terserah AndaKarena kami tidak akan mengirimkan ke Packagist, kami harus memberi tahu Composer di mana menemukan paket tersebut. Kami melakukannya dengan menggunakan blok
// before...
$length = strlen($request->post('slug'));
// after...
$length = mb_strlen($request->post('slug'));
_2Sekarang kami memberi tahu Komposer untuk meminta paket kami sebagai ketergantungan
<?php
// last reviewed: v2.16.3 Yellow Bird
7// before...
$length = strlen($request->post('slug'));
// after...
$length = mb_strlen($request->post('slug'));
_3Setup konfigurasi PHP-CS-Fixer Finder
Agar PHP-CS-Fixer mengetahui file apa yang ingin Anda targetkan, Anda perlu menentukan setiap direktori atau file dengan instance
$ mkdir php-styles
$ cd php-styles
$ git init
$ echo "/composer.lock
/vendor
/.php_cs.cache" >> .gitignore
$ mkdir src
$ touch src/rules.php src/helpers.php composer.json
3. Ini adalah versi turunan dari<?php
// last reviewed: v2.16.3 Yellow Bird
_9, jadi untuk dokumentasi lengkap tentang semua batasan yang dapat Anda gunakan, lihat dokumenSebagai contoh kita, saya akan berpura-pura berada dalam aplikasi Laravel dan menyiapkan pencari saya untuk menelusuri direktori yang saya tahu ingin mematuhi konvensi gaya saya
PHP-CS-Fixer mengharapkan konfigurasi Anda berada dalam file
<?php
// last reviewed: v2.16.3 Yellow Bird
return [
'@PSR2' => true,
'array_syntax' => ['syntax' => 'short'],
'final_class' => false,
'new_with_braces' => true,
// ...
];
0, jadi kami akan membuatnya// before...
$length = strlen($request->post('slug'));
// after...
$length = mb_strlen($request->post('slug'));
_4Buka file ini dan tambahkan setup finder berikut untuk aplikasi Laravel Anda. Anda juga dapat menyertakan folder lain yang ingin Anda perbaiki, tetapi ini berfungsi sebagai default yang masuk akal
// before...
$length = strlen($request->post('slug'));
// after...
$length = mb_strlen($request->post('slug'));
5Kami sekarang siap untuk meneruskan pencari kami ke fungsi pembantu yang kami buat beberapa menit yang lalu. PHP-CS-Fixer mengharapkan file ini mengembalikan instance
<?php
// last reviewed: v2.16.3 Yellow Bird
return [
'@PSR2' => true,
'array_syntax' => ['syntax' => 'short'],
'final_class' => false,
'new_with_braces' => true,
// ...
];
1, yang persis seperti yang dikembalikan oleh fungsi pembantu kami// before...
$length = strlen($request->post('slug'));
// after...
$length = mb_strlen($request->post('slug'));
_6Sekarang posisikan diri Anda pada posisi penjepit sementara kami secara otomatis memperbaiki gaya pengkodean kami di semua direktori ini. Lompat ke terminal dan jalankan perintah berikut untuk menyaksikan keajaiban terjadi…
// before...
$length = strlen($request->post('slug'));
// after...
$length = mb_strlen($request->post('slug'));
_7Berjalan di CI
Sebaiknya terapkan aturan gaya Anda selama C. I. Anda dapat melakukan ini dalam beberapa cara. Anda bisa melakukan "dry run", yang akan gagal jika mendeteksi pelanggaran gaya kode
// before...
$length = strlen($request->post('slug'));
// after...
$length = mb_strlen($request->post('slug'));
_8Atau, Anda bisa memiliki C. I. jalankan pemecah masalah dan komit otomatis perubahan ke repo Anda. Jika Anda menggunakan tindakan GitHub, lihat artikel hebat ini yang ditulis oleh Stefan Zweifel tentang bagaimana Anda mengimplementasikannya
Bungkus
Terima kasih telah datang dalam perjalanan ini. PHP-CS-Fixer adalah alat yang hebat, dan mudah-mudahan, jika Anda menjalankan beberapa proyek yang berbagi gaya pengkodean standar, pendekatan ini mungkin berguna
Diajukan
Berita
timacdonald
Mengembangkan aplikasi web yang menarik dan berkinerja dengan fokus pada TDD. Mengkhususkan diri dalam proyek PHP / Laravel. ❤️ membangun untuk web