Seperti Inilah Tampilan PHP Modern
Judulnya benar-benar sok, bukan? Ya, benar. Meskipun saya telah bekerja dengan PHP selama bertahun-tahun, bagaimana saya bisa menyatakan apa praktik dan alat terbaik untuk pekerjaan itu? Aku tidak bisa, tapi aku akan melakukannya.
Saya melihat perubahan nyata dalam cara pengembang melakukan pekerjaan mereka dengan PHP, tidak hanya bahasanya yang berubah drastis menjadi lebih matang dan kuat dengan versi dan peningkatan baru, tetapi seluruh ekosistem di sekitarnya juga berubah.
Alat, perpustakaan, kerangka kerja, dan artikel baru sedang dibuat, pola didefinisikan untuk membuat kode lebih elegan dan mudah dipahami. Beberapa orang memikirkan cara untuk membuat pekerjaan (dan kehidupan Anda sebagai pengembang) lebih produktif, bersih, dan menyenangkan.
Saya bukan pengadopsi awal tren baru, sebenarnya, saya hanya mengadopsi alat baru jika saya yakin ada komunitas di belakangnya dan menurut saya itu akan meningkatkan pekerjaan saya. Apa yang selalu saya lakukan adalah mencoba menulis kode mengikuti praktik terbaik.
Karena itu, saya membutuhkan waktu untuk mulai menggunakan hal-hal seperti Komposer dan PHPUnit. Sekitar setahun yang lalu, kurang lebih, saya telah membuka hati saya untuk semua hal baru yang berkilau itu.
PSR didahulukan, kemudian Komposer, PHPUnit, Travis-ci dan beberapa pustaka lainnya serta alat luar biasa. Saya bahkan menggunakan IDE sekarang (Vim FTW, tapi PHPStorm dengan integrasi XDebug adalah keharusan untuk alur kerja yang waras)!
Apa itu modern?
Ada banyak artikel di web tentang betapa buruknya PHP, betapa buruknya hidup Anda jika Anda harus bekerja dengan kode PHP, betapa jeleknya bahasanya, dan apa pun yang dapat Anda pikirkan!
Jika Anda akan bekerja dengan kode lawas, mungkin hidup Anda tidak akan sebaik itu, tetapi jika Anda memiliki kesempatan untuk mengerjakan proyek baru dan dapat menggunakan semua alat baru, Anda akan melihat PHP baru ini Aku akan berbicara tentang.
Saya memiliki beberapa masalah dalam bekerja dengan PHP setiap hari, tetapi orang tidak dapat menutup mata terhadap perubahan yang terjadi dalam bahasa, komunitas, dan ekosistem. Ada jalan panjang di depan, tetapi hal-hal menjadi semakin matang di tanah PHP.
Saya mulai membuat SDK untuk API internal di perusahaan tempat saya bekerja, sebagai proyek hewan peliharaan, dan memutuskan untuk mengikuti praktik terbaik. Kebanyakan dari mereka sudah saya lakukan, tetapi saya telah membuat sedikit perubahan dalam cara saya melakukan beberapa hal. Perubahan itu dan apa yang saya pelajari dalam setahun terakhir adalah pokok bahasan artikel ini dan apa yang saya sebut PHP Modern.
Mari mulai dengan alur kerjanya
Seperti yang saya katakan, saya pendatang baru dalam hal IDE ini, tapi itu adalah cinta pada pandangan pertama. PHPStorm adalah perangkat lunak yang luar biasa. Ini adalah IDE saya yang pertama dan satu-satunya. Itu adalah usaha pertama saya dan saya bahkan tidak perlu mencoba yang lain.
Integrasi dengan XDebug sempurna, resolusi namespace PHP, integrasi komposer, integrasi git, pelengkapan otomatis, pembuatan kode, pemfaktoran ulang kode. Saya bisa terus dan terus.
Saya tidak berpikir Anda harus menggunakan IDE, sebenarnya poin ini sepenuhnya pribadi. Anda harus menggunakan apa saja yang sesuai dengan kebutuhan Anda - Vim, Atom, Emacs, Bracket, NetBeans, PHPStorm, Eclipse, apa saja. Dua poin penting di sini adalah produktivitas dan ergonomi. IDE/editor teks Anda harus siap membantu Anda.
Namun, bagi saya, poin bagusnya adalah integrasi debugger. Untuk menulis kode untuk proyek besar (sebenarnya untuk yang kecil juga) Anda harus menggunakan debugger yang layak. Mari kita lupakan var_dumps dan print_rs. Anda perlu menyodok variabel-variabel itu saat runtime, menganalisis pelacakan tumpukan, menyetel titik henti sementara. Hal-hal ini penting dan mempermudah pengembangan dan pemfaktoran ulang.
Saya bahkan tidak tahu apakah ada pilihan lain disini, XDebug memiliki semua yang Anda butuhkan. Apakah kamu punya beberapa menit? Jika Anda belum melakukannya, luangkan waktu sejenak untuk menyiapkan XDebug dan integrasikan ke dalam IDE atau editor teks Anda. Mulailah men-debug kode Anda menggunakan alat yang tepat.
Alat lain yang ingin saya perhatikan adalah GitHub. Seluruh artikel lain dapat ditulis tentang betapa bagusnya Git dan GitHub dan mengapa Anda harus mulai menyimpan kode Anda di bawah sistem versi. Tapi saya ingin menunjukkan alasan lain.
Fokusnya disini adalah integrasi.
Ada beberapa alat yang terintegrasi dengan GitHub dan Anda harus mulai menggunakannya. Alat tersebut dapat menghasilkan metrik, menjalankan pengujian, menjalankan pekerjaan untuk Anda selama proses integrasi berkelanjutan, dan melakukan segala macam hal dalam alur kerja Anda. Integrasi adalah alasan yang baik bagi Anda untuk mulai menggunakan GitHub, yang lainnya akan dibahas di lain waktu.
Manajemen ketergantungan
Poin lain dalam ekosistem PHP modern ini adalah manajemen ketergantungan, dan Komposer adalah alat untuk pekerjaan itu.
Komposer berusia 5 tahun, tetapi menurut saya adopsi besar-besaran terjadi beberapa tahun yang lalu. Mungkin karena saya bukan pengadopsi awal atau mungkin karena pengembang PHP enggan untuk berubah.
Alat ini menyediakan ujung depan ke Packagist, yang merupakan repositori paket PHP yang terdiri dari pustaka, proyek, dan alat PHP, yang kode sumbernya disimpan di Github (atau tempat lain seperti BitBucket).
Semua perpustakaan yang saya bicarakan di artikel ini, dan mungkin salah satu proyek hewan peliharaan Anda, dapat ditambahkan ke proyek Anda dengan sederhana
$ composer require package_vendor/package_name
Jika Anda tidak mengetahui vendor suatu paket, Anda dapat mencari paket untuk menemukan dan memasang yang tepat.
$ composer search package_name
Komposer akan menjadi alat yang hebat jika hanya melakukan ini, mengelola dependensi, tetapi melakukan lebih banyak lagi. Luangkan waktu untuk menginstal Composer dan baca dokumentasinya.
Antarmuka baris perintah dilakukan dengan benar
Saya sangat suka mencoba ide dengan cepat menggunakan interface CLI. Bagi saya, salah satu alat REPL terbesar adalah IPython. Ini membantu Anda melengkapi kode secara otomatis, memungkinkan Anda menentukan fungsi dengan mudah, memudahkan akses ke dokumentasi dan beberapa fitur menakjubkan lainnya. Sisi negatifnya bagi kami, alat ini untuk Python, bukan PHP.
Di dunia PHP kami memiliki sesuatu yang disebut "mode interaktif" yang dapat diakses oleh terminal, cukup mengetik
$ php -a
Interactive mode enabledphp >
Pada titik ini, Anda berada dalam mode interaktif dan dapat memulai pengujian sesuatu. Ini berfungsi, tetapi alatnya terlalu tidak intuitif. Saya sudah mencobanya beberapa kali tetapi, karena saya tahu apa yang dapat dilakukan IPython, saya tidak dapat terus menggunakannya.
Untuk keberuntungan kami, ada CLI (antarmuka baris perintah) baru yang keren di blok tersebut dan namanya Psysh. Psysh adalah alat luar biasa, penuh fitur menarik dan dapat diinstal secara global atau per proyek menggunakan komposer.
Fitur Psysh terbaik bagi saya adalah dokumentasi sebaris. Mengakses dokumen untuk fungsi PHP tanpa membuka Php.net sangatlah bagus. Sisi negatifnya adalah Anda perlu melakukan beberapa hal sebelum berfungsi penuh.
Setelah menginstalnya, ketikkan perintah berikut (Saya menggunakan Debian di sini, ini mungkin tidak berfungsi untuk semua orang) agar berfungsi dengan baik
$ apt-get install php7.1-sqlite3
$ mkdir /usr/local/share/psysh
$ wget http://psysh.org/manual/en/php_manual.sqlite -o /usr/local/share/psysh/php_manual.sqlite
Perintah pertama tidak wajib dan jika Anda sudah menginstal Sqlite, Anda dapat melewati langkah ini. Perintah kedua membuat direktori untuk menyimpan dokumentasi dan baris ketiga mengunduh dan menyimpan dokumen ke direktori yang dibuat sebelumnya. Ingat, semua perintah ini harus dijalankan sebagai root.
Sekarang Anda memiliki ini
Buka Psysh dan pelajari lebih lanjut tentang alat luar biasa ini.
Anda harus mulai menguji
Ini mantra yang kuucapkan pada diriku sendiri setiap hari. Seperti kebanyakan orang, saya tidak menguji kode saya sebanyak yang disarankan TDD. Saya sedang menjalani pengujian sekarang dan telah melakukannya selama setengah tahun terakhir, dan jalan masih panjang di depan.
Saya memutuskan untuk mempelajari tentang pengujian saat bekerja dengan proyek warisan yang kompleks. Kodenya sangat rapuh dan kaku sehingga setiap kali kami menambahkan beberapa kode, itu akan merusak sesuatu. Fitur baru? Terapkan dan hancurkan sesuatu! Memperbaiki bug? Buat satu lagi.
Itu adalah masalah besar, yang saya diskusikan di artikel lain, dan membuat saya mulai memberikan kesempatan tes.
Alat pertama yang saya sajikan adalah PHPUnit. Seperti yang tertera dalam situs resminya
PHPUnit adalah kerangka pengujian berorientasi programmer untuk PHP. Ini adalah turunan dari arsitektur xUnit untuk kerangka pengujian unit.
Jadi, PHPUnit adalah kerangka kerja untuk membantu Anda membuat pengujian untuk proyek Anda, pengujian kesatuan. Ini memberi Anda beberapa fungsi untuk menguji hasil kode Anda dan menghasilkan keluaran yang bagus dengan hasil dari pengujian tersebut.
Sejak saya mulai berpikir tentang pengujian, membaca dan membicarakannya dengan orang-orang, saya telah menemukan alat hebat lainnya, yang melengkapi pekerjaan yang telah Anda lakukan dalam pengujian kesatuan tersebut, yaitu calle Behat, yang merupakan kerangka kerja BDD untuk PHP.
BDD (Behavior-Driven Development) adalah proses pengembangan yang berasal dari TDD (Test-Driven Development). Akronim itu tidak penting sekarang, yang penting adalah Anda dapat menentukan pengujian Anda menggunakan bahasa yang lebih alami, bahasa yang dapat dipahami oleh orang non-teknis.
Bahasa ini disebut Gherkin dan digunakan untuk menggambarkan perilaku yang diharapkan sedang diuji. Deskripsi tes, menggunakan Gherkin, terlihat seperti ini
Di balik baris tersebut terdapat kode PHP yang dipanggil setiap kali ada kecocokan antara baris dan pola regex yang ditentukan dalam metode PhpDoc. Kode ini mengimplementasikan langkah-langkah tersebut dan apa yang akan dilakukan oleh pengguna sebenarnya, menggunakan SDK, aplikasi, atau sistem web Anda.
Alur kerja dengan Behat sangat lancar. Setelah semuanya terkonfigurasi dengan benar, Anda mulai menulis semua kemungkinan skenario untuk menguji suatu fitur. Pertama kali Anda menjalankan Behat, ini memberi Anda semua templat metode yang harus Anda tambahkan ke kelas Konteks PHP Anda untuk mengimplementasikan setiap langkah dalam sebuah skenario.
Setelah itu, Anda mulai menulis kode sebenarnya untuk setiap langkah dan terus mengulangi siklus ini.
- Terapkan kode PHP untuk satu langkah
- Jalankan tes
- Jika semuanya baik-baik saja, tulis kode PHP untuk langkah selanjutnya
- Jika ada yang rusak, perbaiki
Setelah setengah jam mengonfigurasi dan membaca dokumentasi, Anda siap menggunakan Behat, Anda akan melihat bahwa pada akhirnya semuanya adalah kode PHP dan Anda sudah tahu cara memprogramnya.
Integrasi Berkelanjutan
Integrasi berkelanjutan (CI) adalah sebuah proses - cara untuk melakukan sesuatu, dan hal ini, bagi kami para insinyur perangkat lunak, adalah membuat perangkat lunak.
Dalam bahasa Inggris biasa, ini adalah tindakan memasukkan potongan kode kecil secara terus-menerus (mungkin beberapa kali sehari) ke dalam basis kode Anda. Kode yang telah diuji dan tidak merusak apapun. CI membantu Anda mengotomatiskan pembuatan, pengujian, dan penerapan aplikasi Anda.
Dengan beberapa klik Anda dapat mengintegrasikan proyek GitHub Anda dengan Travis CI dan setiap dorongan ke repositori Anda akan menjalankan pengujian yang Anda buat dengan PHPUnit dan Behat, memberi tahu Anda apakah fitur terakhir yang telah Anda implementasikan sudah siap, atau belum, untuk digabungkan . Selain itu, Anda dapat menggunakan Travis CI untuk menerapkan kode Anda ke produksi dan pementasan.
Memiliki alur kerja yang bagus dengan proses yang terdefinisi dengan baik itu bagus dan Travis CI dapat membantu Anda dengan pekerjaan ini. Ikuti ini bagus Memulai dan temukan betapa menariknya memikirkan tentang proses pengembangan perangkat lunak, bukan hanya kode itu sendiri.
Patuhi PSR-1 dan PSR-2
Jika Anda tidak tahu apa itu PSR, Anda harus melakukannya. Sebenarnya, PSR adalah singkatan dari Rekomendasi Standar PHP dan diusulkan oleh PHP-FIG (PHP Framework Interop Group), sebuah konsorsium yang dibentuk oleh anggota dari proyek, kerangka kerja, dan CMS PHP terbesar, yang memikirkan masa depan bahasa, ekosistem, dan diskusi standar yang harus diikuti.
Untuk waktu yang lama, PHP tidak memiliki gaya pengkodean. Saya tidak setua itu, tetapi setiap kali saya melihat proyek atau perpustakaan seseorang, itu mengikuti gaya yang berbeda. Terkadang braket dibiarkan di satu posisi, terkadang diletakkan di baris berikutnya, pendekatan yang berbeda digunakan untuk menangani garis panjang dan setiap kombinasi gaya dan preferensi lainnya yang dapat Anda pikirkan. Itu berantakan.
PHP-FIG melakukan banyak pekerjaan lain, tetapi dengan mengusulkan satu kesatuan kode, mereka mengatakan "Mari kita berhenti mengkhawatirkan tentang gaya kode, mari semua orang mengikuti standar dan mulai berpikir tentang membuat perangkat lunak yang hebat". Sekarang, setiap kali Anda melihat kode seseorang, Anda hanya perlu khawatir untuk memahami cara kerjanya, bukan menyalahkan formatnya, strukturnya.
Sampai akhir artikel ini, ada 9 PSR yang diterima yang mengusulkan solusi umum untuk masalah umum. Tetapi jika Anda tidak tahu apa-apa tentang standar tersebut, mulailah dengan PSR-1 dan PSR-2.
Standar ini mengusulkan gaya pengkodean PHP modern. Pastikan Anda membacanya sebelum mulai menggunakannya. Jangan mengira Anda akan mengingat semuanya saat membuat kode, ini adalah proses, tetapi untuk memastikan Anda, ada alat untuk membantu Anda.
PHP CodeSniffer adalah alat yang dapat Anda temukan di Packagist yang dapat Anda instal dengan Composer. Menurut saya nama repositori bukanlah pilihan terbaik, karena nama ini mengirimkan dua alat berbeda, phpcs dan phpcbf.
Phpcs adalah pengendus kode, ia akan memindai seluruh kode Anda, mencari bagian yang tidak mengikuti standar pengkodean yang telah dikonfigurasi.
Anda bisa menggunakan beberapa standar pengkodean dengan phpcs dan Anda bahkan bisa membuatnya sendiri. Di akhir pemindaian kode, phpcs menunjukkan kepada Anda daftar potongan kode yang tidak mengikuti standar. Sangat bagus.
Sekarang, bagaimana mengubah segala sesuatu yang salah? Anda dapat membuka setiap file, mengubah kode, menjalankan phpcs lagi, melihat error tidak ditampilkan, dan mengulangi prosesnya. Ini akan sangat membosankan.
Untuk mengatasi masalah ini, PHP CodeSniffer hadir dengan alat lain yang disebut PHPCBF, atau PHP Code Beautifier. Anda menjalankan phpcbf, mengikuti set aturan yang sama dan, ya, itu memperbaiki segalanya untuk Anda, atau mencoba untuk melakukan yang terbaik tanpa merusak kode Anda.
Cobalah untuk membuat kebiasaan menjalankan phpcs dan phpcbf sebelum memasukkan perubahan apa pun dalam kode Anda ke repositori, ini akan memastikan bahwa semua kode Anda mematuhi standar dan jika seseorang menyukai alat/proyek Anda dan ingin berkontribusi, mereka tidak akan masalah membacanya.
Kerangka kerja
Saya tidak akan mendedikasikan terlalu banyak waktu untuk membahas kerangka kerja. Ada beberapa yang bagus di luar sana, masing-masing dengan pasang surutnya. Secara pribadi, saya memilih untuk tidak menggunakan kerangka kerja besar itu, dengan segala sesuatu di dalamnya. Saya suka gagasan bahwa Anda harus menggunakan apa yang Anda butuhkan.
Jika Anda memerlukan klien HTTP, gunakan Guzzle. Jika Anda membutuhkan mesin template, gunakan Twig. Jika Anda membutuhkan router, temukan komponen bagus yang sesuai dengan kebutuhan Anda dan gunakan. Rekatkan komponen ini bersama-sama dan buat aplikasi Anda.
Symfony melakukan pekerjaan yang hebat terhadap konsep ini. Anda dapat menggunakan keseluruhan kerangka kerja untuk sebuah proyek, atau Anda dapat mengambil apa saja yang Anda inginkan dan menggunakannya. Sederhana seperti itu.
Namun, setiap kali saya membutuhkan kerangka kerja untuk menulis aplikasi, saya memilih salah satu dari yang disebut kerangka mikro. Mereka sangat kecil, hanya menawarkan dasar-dasarnya dan mudah disesuaikan serta lebih mudah membuatnya mengikuti struktur proyek Anda.
Kerangka mikro pilihan saya adalah Slimframework dan menurut saya Anda harus membacanya. Ini sederhana untuk melakukan proyek kecil, tetapi menjadi sedikit lebih rumit untuk proyek yang lebih besar.
Omong-omong, dan ini untuk mereka yang memulai dengan pemrograman, saya benar-benar berpikir bahwa sebelum mengadopsi kerangka kerja dan mati untuk itu, Anda harus mencoba membuatnya sendiri. Ini akan memberi Anda pemahaman tentang keseluruhan mekanisme dan memudahkan adopsi yang besar.
Perangkat PHP Modern
Mari selesaikan artikel ini dengan daftar tautan. Bagi saya, komponen, alat, dan purpustakaan ini mewakili banyak hal tentang apa itu PHP Modern:
- Slimframework: microframework yang bagus dan keren
- Symfony: kerangka kerja yang lebih besar yang diisi dengan komponen yang bagus dan dapat digunakan kembali
- Guzzle: klien HTTP yang sederhana dan mudah digunakan
- PHPUnit: kerangka kerja untuk pengujian kesatuan
- Behat: kerangka kerja untuk Pengembangan Berbasis Perilaku
- PHPCS/CBF: pengendus kode dan penghias kode
- Faker: pembuat data palsu
- Psysh: konsol pengembang runtime (CLI) yang penuh dengan fitur luar biasa
- Komposer: manajemen ketergantungan dan fitur berguna lainnya
- Packagist: repositori paket
- Twig: mesin templat
Judulnya benar-benar megah, saya tahu. Yang ingin saya tunjukkan di sini adalah bahwa PHP berkembang dan ekosistem berkembang dengan kecepatan yang sama (mungkin lebih cepat).