Show
PendahuluanDi internet, tersebar banyak sekali tutorial kuno yang menyesatkan programmer PHP. Mengajarkan cara buruk dan menyebarkan contoh kode yang tidak aman. PHP: The Right Way adalah referensi yang mengikuti standar pengkodean modern, ditujukan bagi para programmer baru agar dapat membangun software berkualitas menggunakan PHP. Sebetulnya, tidak ada satu cara autentik untuk menggunakan PHP. Namun, website ini bermaksud untuk mengenalkan programmer PHP baru kepada hal-hal yang tidak mereka temukan selama ini. Bagi programmer senior, tulisan ini dapat menjadi penyegar pada apa yang telah mereka lakukan selama ini. Tulisan ini juga akan memperbarui cara-cara lama yang sudah terlanjur mendarahdaging. Dokumen ini akan terus diperbarui dengan informasi dan contoh-contoh terbaru sehingga akan terus bermanfaat. Terjemahan di Bahasa LainPHP: The Right Way sudah diterjemahkan ke banyak bahasa lain:
Ingin berkontribusi?Ayo bantu website ini agar menjadi sumber terbaik bagi para progammer PHP baru! Ayo berkontribusi di GitHub Bantu sebarkanPHP: The Right Way memiliki gambar banner yang bisa dipasang di website Anda. Tunjukkan kepedulian anda kepada programmer PHP baru untuk mengetahui letak informasi yang bagus. Gambar Banner Kembali ke atas MemulaiGunakan versi PHP stabil terbaru (5.5)Jika Anda baru saja mulai PHP, pastikan memulai dengan rilis stabil terbaru yaitu PHP 5.5. Selama beberapa tahun terakhir ini, PHP telah membuat langkah besar dengan menambahkan fitur baru. Jangan tertipu oleh perbedaan versi minor antara 5.2 dan 5.5, karena sebenarnya itu adalah perubahan yang sangat besar. Jika Anda mencari fungsi atau penggunaannya, silakan kunjungi php.net. Web server bawaanAnda dapat mulai belajar PHP dengan menggunakan web server bawaan (minimal PHP 5.4). Untuk memulai server, jalankan perintah berikut dari terminal Anda dalam sebuah directory:
Setup di MacOSX sudah dikemas dengan PHP, tetapi biasanya sedikit tertinggal dari versi terbaru. Lion datang dengan PHP 5.3.6, Mountain Lion membawa PHP 5.3.10, dan Mavericks membawa PHP 5.4.17. Untuk memperbarui PHP di OSX, Anda bisa menginstalnya melalui mac-package-managers, dan dianjurkan dengan [php-OSX oleh Liip] [php-osx-download]. Pilihan lainnya adalah dengan mengkompilasi sendiri, dalam kasus ini pastikan Xcode telah diinstal. Atau pengganti [“Tools Command Line untuk Xcode”] Apple apple-developer dapat didownload dari Apple Mac Developer Center. Untuk paket “all-in-one” termasuk PHP, web server Apache, dan database MySQL, dengan kontrol yang baik dilengkapi GUI, cobalah [MAMP] [mamp-download] atau XAMPP. Setup di WindowsAda beberapa cara untuk setup PHP di Windows. Anda dapat [men-download binari] [php-download]. Untuk proses belajar dan development di lokal, Anda dapat menggunakan built in webserver dengan PHP 5.4+ sehingga Anda tidak perlu mengkhawatirkan konfigurasi yang rumit. Jika Anda ingin paket “all-in-one” yang mencakup webserver dan MySQL, paket seperti Web Platform Installer, Zend Server CE, XAMPP dan WAMP akan membantu memberikan environment di Windows. Namun, harap berhati-hati karena paket ini akan sedikit berbeda dari environment produksi jadi berhati-hatilah dengan perbedaan lingkungan jika Anda bekerja pada Windows dan menggunakan untuk Linux. VagrantSeringkali developer menemukan masalah ketika menjalankan aplikasi pada saat development dan production. Masalah itu ditimbulkan karena perbedaan environment. Misalkan developer membuat aplikasi di Windows, sedangkan server produksi menggunakan Linux. Masalah tersebut semakin terasa ketika anda bekerja dalam sebuah tim di mana setiap anggota menggunakan OS yang berbeda-beda. Salah seorang menggunakan Windows, satu orang menyukai MacOS, dan lainnya memilih Linux. Jika itulah yang Anda alami, mungkin ada baiknya Anda mempertimbangkan menggunakan mesin virtual dalam development. Kedengarannya rumit, tapi dengan menggunakan Vagrant, Anda dapat dengan mudah mengatur mesin virtual hanya dalam beberapa langkah. Mesin virtual ini kemudian dapat diatur secara manual, atau Anda dapat menggunakan “provisioning” software seperti Puppet atau Chef untuk melakukannya. Provisioning mesin virtual adalah cara yang bagus untuk memastikan bahwa beberapa mesin ditetapkan dalam cara yang identik. Dan menghilangkan kebutuhan bagi Anda untuk men-setup nya secara manual. Anda bahkan dapat dengan mudah menghapus mesin virtual tersebut dan membuatnya lagi dari awal. Vagrant menciptakan shared folder yang digunakan untuk berbagi kode antara host dan mesin virtual Anda, yang berarti Anda dapat membuat dan mengedit file Anda pada mesin host Anda dan kemudian menjalankan kode di dalam mesin virtual Anda. Bantuan SingkatJika Anda perlu sedikit bantuan untuk mulai menggunakan Vagrant ada tiga layanan yang mungkin berguna:
Kembali ke atas Panduan Code StyleKomunitas PHP sangatlah besar dan beragam. Ada banyak library, framework, dan component yang sudah tersedia. Dalam memilih library-_library_ dan framework ini dan menggunakannya dalam sebuah proyek, developer perlu mematuhi aturan code style yang digunakan pada framework tersebut. The PHP Framework Interop Group telah mengusulkan dan menyetujui serangkaian rekomendasi gaya pengkodean. Meskipun tidak semuanya terkait dengan code style, tapi mereka yang merumuskan PSR-0, PSR-1, PSR-2 dan PSR-4. Rekomendasi ini hanyalah seperangkat aturan dan sudah diadopsi oleh beberapa proyek seperti Drupal, Zend, Symfony, CakePHP, phpBB, AWS SDK, FuelPHP, Lithium, dll. Anda dapat memilih antara mengikuti PSR untuk proyek-proyek Anda sendiri, atau terus menggunakan gaya pribadi Anda sendiri. Idealnya Anda harus menulis kode PHP yang mematuhi standar yang dikenal. Ini bisa berupa kombinasi dari PSR, atau satu standar coding yang dibuat oleh PEAR atau Zend. Ini berarti developer lain dapat dengan mudah membaca dan bekerja dengan kode Anda, dan aplikasi yang menerapkan komponen dapat memiliki konsistensi bahkan ketika bekerja dengan banyak kode pihak ketiga.
Anda dapat menggunakan PHP_CodeSniffer untuk memeriksa kode terhadap salah satu dari rekomendasi tersebut, dan plugin untuk editor teks seperti Text Sublime 2 dapat memberikan feedback secara real time. Gunakan tools dari Fabien Potencier ini PHP Coding Standards Fixer untuk secara otomatis mengubah sintaks kode Anda sehingga sesuai dengan standar-standar ini, menghemat waktu untuk memperbaiki setiap masalah secara manual. Bahasa Inggris lebih disukai untuk semua nama simbol dan infrastruktur kode. Komentar dapat ditulis dalam bahasa yang mudah dibaca oleh semua pihak saat ini dan masa depan yang akan mengerjakan source code tersebut. Kembali ke atas Gambaran Bahasa PHPParadigma PemrogramanPHP adalah bahasa pemrograman fleksibel, dinamis, dan mendukung berbagai teknik pemrograman. Perkembangan yang sangat pesat telah terjadi di PHP selama bertahun-tahun, terutama dukungan terhadap pemrograman berorientasi objek (OOP) di PHP 5.0 (2004), anonymous function dan namespace di PHP 5.3 (2009), dan trait di PHP 5.4 (2012). Pemrograman Berorientasi ObjectPHP sangat mendukung pemrograman berorientasi obyek termasuk dukungan untuk class, abstract class, interface, inheritance, constructor, cloning, exception, dan banyak lagi.
Pemrograman FungsionalPHP mendukung first class function, yang berarti bahwa fungsi dapat dimasukkan ke dalam sebuah variabel. Kedua user-defined dan built-in fungsi dapat direferensikan oleh variabel dan dipanggil secara dinamis. Fungsi dapat disahkan sebagai argumen untuk lainnya fungsi (fitur yang disebut fungsi-order yang lebih tinggi) dan fungsi dapat kembali fungsi lainnya. Rekursi, sebuah fitur yang memungkinkan fungsi untuk menyebut dirinya didukung oleh bahasa, tetapi sebagian besar fokus kode PHP pada iterasi. Fungsi anonim baru (dengan dukungan untuk penutupan) yang hadir sejak PHP 5.3 (2009). PHP 5.4 menambahkan kemampuan untuk mengikat penutupan untuk lingkup obyek dan juga meningkatkan dukungan untuk callables sehingga mereka dapat digunakan secara bergantian dengan fungsi anonim di hampir semua kasus.
Pemrograman MetaPHP mendukung berbagai bentuk meta-pemrograman melalui mekanisme seperti API Refleksi dan Metode Sihir. ada Metode Sihir banyak tersedia seperti
NamespacesSebagaimana disebutkan di atas, komunitas PHP memiliki banyak pengembang menciptakan banyak kode. Ini berarti bahwa kode PHP sebuah library dapat menggunakan nama kelas yang sama dengan perpustakaan lain. Ketika kedua perpustakaan digunakan dalam namespace yang sama, mereka bertabrakan dan menyebabkan masalah. Namespaces memecahkan masalah ini. Seperti dijelaskan dalam manual referensi PHP, ruang nama dapat dibandingkan ke direktori sistem operasi yang namespace file; dua file dengan nama yang sama dapat hidup berdampingan dalam direktori terpisah. Demikian juga, dua kelas PHP dengan nama yang sama dapat hidup berdampingan dalam PHP terpisah namespaces. Ini sesederhana itu. Hal ini penting bagi Anda untuk memberikan namespace pada kode Anda sehingga dapat digunakan oleh pengembang lain tanpa rasa takut bertabrakan dengan library lain. Salah satu cara yang direkomendasikan untuk menggunakan namespaces diuraikan dalam PSR-0, yang bertujuan untuk memberikan file standar, kelas dan namespace konvensi untuk memungkinkan kode plug-and-play. Pada bulan Desember 2013 PHP-FIG menciptakan standar baru autoloading: PSR-4, yang suatu saat akan mungkin menggantikan PSR-0. Saat ini keduanya masih digunakan, PSR-4 membutuhkan PHP 5.3 dan banyak proyek yang masih menggunakan PHP 5.2 yang saat ini menerapkan PSR-0. Jika Anda akan menggunakan standar autoloader untuk aplikasi atau library baru maka Anda hampir pasti ingin lebih tau tentang PSR-4.
Standard PHP LibraryStandard PHP Library (SPL) dikemas bersamaan dengan PHP dan menyediakan sekumpulan class dan interface. SPL terdiri dari class dan interface struktur data yang umumnya diperlukan seperti stack, queue, heap, dan sebagainya. Juga iterator yang dapat traverse struktur data tersebut yang dapat Anda implementasikan sendiri menggunakan interface SPL.
Command Line InterfacePada dasarnya, PHP diciptakan untuk menulis aplikasi web. Akan tetapi PHP juga berguna untuk scripting program command line interface (CLI). CLI dengan PHP dapat membantu Anda mengotomatisasi tugas-tugas umum seperti pengujian, distribusi, dan aplikasi administratif. Program CLI PHP sangat bermanfaat karena Anda dapat menggunakan kode aplikasi Anda secara langsung tanpa harus membuat dan mengamankan web GUI untuk itu. Hanya pastikan untuk tidak menempatkan script CLI PHP di root web publik Anda! Coba jalankan PHP dari baris perintah Anda:
Opsi Mari kita menulis “Hello, $ name” Program
CLI sederhana. Untuk mencobanya, membuat file bernama
PHP set up dua variabel khusus berdasarkan argumen apa script Anda dijalankan. Expresi Untuk menjalankan script kita di atas, jalankan baris perintah:
XDebugSalah satu alat yang paling berguna dalam pengembangan perangkat lunak adalah debugger yang tepat. Hal ini memungkinkan Anda untuk melacak pelaksanaan kode Anda dan memantau isi stack. XDebug, debugger PHP, dapat dimanfaatkan oleh berbagai IDE untuk memberikan Breakpoints dan tumpukan inspeksi. Hal ini juga dapat memungkinkan alat seperti PHPUnit dan KCacheGrind untuk melakukan analisis code scope dan code profile. Jika Anda telah menggunakan var_dump / print_r, dan Anda masih tidak dapat menemukan solusi - mungkin Anda perlu menggunakan debugger. Instalasi XDebug bisa jadi cukup rumit, tetapi salah satu fitur yang paling penting adalah “Remote Debugging” - jika Anda mengembangkan kode lokal dan kemudian mengujinya di dalam VM atau server lain, Remote Debugging adalah fitur yang Anda akan ingin mengaktifkannya segera. Secara tradisional, Anda akan memodifikasi file htaccess Apache VHost atau dengan nilai-nilai ini.:
“remote host” dan “remote port” akan sesuai dengan komputer lokal Anda dan port yang Anda mengkonfigurasi IDE untuk mendengarkan pada. Maka itu hanya masalah menempatkan IDE Anda ke dalam “mendengarkan koneksi” mode, dan memuat URL:
IDE Anda sekarang akan mencegat keadaan saat ini sebagai script yang dieksekusi, yang memungkinkan Anda untuk mengatur breakpoints dan probe nilai-nilai dalam memori. Debugger grafis membuatnya sangat mudah untuk langkah melalui kode, memeriksa variabel, dan kode eval terhadap runtime hidup. Banyak IDE ini telah built-in atau dukungan berbasis-plugin untuk debugging grafis dengan Xdebug. MacGDBp adalah tool gratis, open-source, berdiri sendiri Xdebug GUI untuk Mac.
Kembali ke atas Dependency ManagementAda segudang library, framework, dan komponen yang dapat dipilih di PHP. Proyek Anda mungkin akan menggunakan beberapa dari mereka - hal ini disebut sebagai dependensi / ketergantungan. Sampai saat ini, PHP tidak memiliki cara yang baik untuk mengelola dependensi proyek ini. Bahkan jika Anda berhasil melakukannya secara manual, Anda masih harus khawatir tentang autoloaders. Namun kini tidak lagi. Saat ini ada dua sistem manajemen paket utama untuk PHP - Komposer dan PEAR. Mana yang tepat bagi Anda? Jawabannya adalah keduanya.
Secara umum, paket Composer akan tersedia hanya dalam proyek-proyek yang secara eksplisit Anda tentukan sedangkan paket PEAR akan tersedia bagi semua proyek PHP Anda. Sementara PEAR mungkin terdengar seperti lebih mudah pendekatan pada pandangan pertama, ada keuntungan untuk menggunakan pendekatan dependensi proyek-by-proyek. Composer dan PackagistComposer adalah sebuah pengelola ketergantungan (dependency manager) yang brilian untuk PHP. Daftarkan ketergantungan proyek Anda dalam file Sudah ada banyak library PHP yang kompatibel dengan Composer, siap untuk digunakan dalam proyek Anda. “Paket-paket” tersebut terdaftar pada Packagist, repositori resmi untuk library PHP yang kompatibel dengan Composer. Cara Install ComposerAnda dapat menginstal Composer di lokal (dalam direktori kerja Anda saat ini, meskipun hal ini tidak lagi dianjurkan) atau global
(misalnya
Perintah di atas akan men-download Install di WindowsUntuk pengguna Windows cara termudah untuk memulai adalah dengan menggunakan ComposerSetup installer, yang melakukan instalasi global dan set up Cara Install Composer (manual)Menginstal Composer secara manual adalah teknik canggih; Namun, ada berbagai alasan mengapa pengembang mungkin lebih memilih metode ini vs menggunakan rutin instalasi interaktif. Instalasi interaktif memeriksa instalasi PHP Anda untuk memastikan bahwa:
Karena instalasi manual tidak melakukan pemeriksaan di atas, Anda harus memutuskan apakah trade-off nya sangat berharga untuk Anda. Dengan demikian, di bawah ini adalah bagaimana untuk mendapatkan Komposer secara manual:
Path Bila Anda menemukan dokumentasi yang menyatakan untuk menjalankan
Bagian ini akan menganggap Anda telah menginstal komposer global. Cara mendefinisikan ketergantungan dan cara installnyaComposer melacak dependensi proyek Anda dalam sebuah file yang bernama
Sebagai alternatif, perintah Selanjutnya, tambahkan baris ini ke file utama aplikasi PHP Anda; ini akan memberitahu PHP untuk menggunakan autoloader Composer sebagai dependensi proyek Anda.
Sekarang Anda dapat menggunakan dependensi proyek Anda, dan mereka akan otomatis diambil pada permintaan. Meng-update ketergantunganComposer membuat sebuah
file bernama Hal ini sangat berguna ketika Anda mendefinisikan persyaratan versi yang fleksibel. Misalnya persyaratan versi
~ 1,8 berarti “sesuatu yang lebih baru dari 1.8.0, tetapi kurang dari 2.0.x-dev”. Anda juga dapat menggunakan Notifikasi UpdateUntuk menerima pemberitahuan tentang rilis versi baru Anda dapat mendaftar untuk
VersionEye, sebuah layanan web yang dapat memonitor GitHub dan BitBucket menyumbang Cek ketergantungan Anda terhadap masalah keamananThe Security Advisories Checker adalah layanan web dan alat perintah baris, keduanya akan memeriksa file
PEARManajer paket lain veteran bahwa banyak pengembang PHP menikmati adalah PEAR. Ini berperilaku dengan cara yang sama seperti Composer, namun memiliki beberapa perbedaan mencolok. PEAR mewajibkan setiap paket memiliki struktur tertentu, yang berarti bahwa penulis paket harus mempersiapkan untuk penggunaan dengan PEAR. Menggunakan proyek yang tidak siap untuk bekerja dengan PEAR tidak mungkin. PEAR menginstal paket secara global, yang berarti setelah menginstal mereka sekali mereka yang tersedia untuk semua proyek yang pada Server. Hal ini dapat baik jika banyak proyek bergantung pada paket yang sama dengan versi yang sama tetapi mungkin menyebabkan masalah jika konflik antara versi dua proyek muncul. Cara Install PEARAnda dapat menginstal PEAR dengan men-download installer Phar dan melaksanakan itu. Dokumentasi PEAR telah rinci petunjuk instalasi untuk setiap sistem operasi. Jika Anda menggunakan Linux, Anda juga dapat melihat di manajer paket distribusi Anda. Debian dan Ubuntu, misalnya, memiliki apt Cara Install PaketJika paket terdaftar di paket PEAR list, Anda dapat menginstalnya dengan menetapkan nama resmi: Jika paket di-host di saluran lain, Anda perlu
Menangani Paket PEAR dengan ComposerJika Anda sudah menggunakan Composer dan Anda ingin menginstal beberapa kode PEAR juga, Anda dapat menggunakan Komposer untuk menangani dependensi PEAR Anda. Contoh ini akan menginstal kode dari
Bagian pertama
The “pir” awalan hardcoded untuk menghindari konflik, sebagai saluran pir bisa menjadi sama dengan nama vendor lain paket misalnya, maka nama pendek channel (atau URL lengkap) dapat digunakan untuk referensi yang menyalurkan paket tersebut masuk. Ketika kode ini terinstal akan tersedia dalam direktori vendor Anda dan secara otomatis tersedia melalui autoloader Composer:
Untuk menggunakan paket PEAR ini hanya referensi seperti:
Kembali ke atas Coding PracticesDasarPHP adalah bahasa yang luas yang memungkinkan coders dari semua tingkat kemampuan untuk menghasilkan kode tidak hanya cepat, tapi efisien. Namun selagi maju melalui bahasa, kita sering melupakan dasar-dasar yang pertama kita pelajari (atau diabaikan) dalam mendukung pemotongan pendek dan / atau kebiasaan buruk. Untuk membantu memerangi masalah umum ini, bagian ini ditujukan untuk mengingatkan coders dari praktek coding dasar dalam PHP.
Tanggal dan WaktuPHP memiliki kelas bernama DateTime untuk membantu Anda ketika membaca, menulis, atau menghitung membandingkan dengan tanggal dan waktu. ada banyak tanggal dan waktu fungsi dalam PHP terkait selain DateTime, tetapi menyediakan antarmuka yang bagus berorientasi obyek untuk sebagian penggunaan umum. Ia bisa menangani zona waktu, tapi itu di luar pengenalan singkat ini. Untuk mulai bekerja dengan DateTime, mengubah tanggal dan waktu baku string untuk obyek dengan
Menghitung dengan DateTime adalah mungkin dengan kelas DateInterval. DateTime memiliki metode seperti
On DateTime objects you can use standard comparison:
Salah satu contoh terakhir untuk menunjukkan kelas DatePeriod. Hal ini digunakan untuk beralih di atas berulang peristiwa. Hal ini dapat mengambil dua Objek DateTime, awal dan akhir, dan interval yang akan mengembalikan semua peristiwa di antara.
Design PatternsKetika Anda sedang membangun aplikasi Anda akan sangat membantu untuk menggunakan pola-pola umum dalam kode Anda dan pola umum untuk struktur keseluruhan dari proyek Anda. Menggunakan pola umum adalah membantu karena membuat lebih mudah untuk mengelola kode Anda dan memungkinkan pengembang lain dengan cepat memahami bagaimana segalanya cocok bersama-sama. Jika Anda menggunakan kerangka maka sebagian besar kode tingkat tinggi dan struktur proyek akan didasarkan pada kerangka itu, sehingga banyak keputusan pola yang dibuat untuk Anda. Tapi itu masih terserah Anda untuk memilih pola terbaik untuk mengikuti kode Anda membangun di atas kerangka. Jika, di sisi lain, Anda tidak menggunakan kerangka kerja untuk membangun aplikasi Anda maka Anda harus menemukan pola yang paling sesuai dengan jenis dan ukuran aplikasi yang Anda sedang membangun.
PHP dan UTF-8Bagian this awalnya ditulis oleh [Alex Cabal] (https://alexcabal.com/) ke arah [PHP Praktik Terbaik] (https://phpbestpractices.org/ # utf-8) dan kini telah bersama here. Tidak ada satu baris. Hati-hati, detail, dan konsisten.Saat ini PHP tidak mendukung Unicode pada tingkat yang rendah. Ada beberapa cara untuk memastikan bahwa UTF-8 string diproses OK, tapi itu tidak mudah, dan membutuhkan menggali ke hampir semua tingkat aplikasi web, dari HTML ke SQL ke PHP. Kami akan bertujuan untuk singkat, ringkasan praktis. UTF-8 di level PHPOperasi string dasar, seperti concatenating dua string dan menetapkan string ke variabel, tidak perlu apa-apa khusus untuk UTF-8. Namun sebagian besar fungsi string, seperti Anda harus menggunakan Bagian yang sulit adalah mengingat untuk menggunakan Tidak semua fungsi string memiliki mitra Selain itu, Anda harus menggunakan Akhirnya, banyak fungsi PHP yang beroperasi pada string memiliki parameter opsional membiarkan Anda menentukan karakter encoding. Anda harus selalu secara eksplisit menunjukkan UTF-8 ketika diberi pilihan. Sebagai contoh, Perhatikan bahwa pada PHP
5.4.0, UTF-8 adalah encoding default untuk UTF-8 di level DatabaseJika script PHP Anda mengakses MySQL, ada kemungkinan string Anda dapat disimpan sebagai non-UTF-8 string dalam database bahkan jika Anda mengikuti semua tindakan pencegahan di atas. Untuk memastikan string Anda pergi dari PHP ke MySQL sebagai UTF-8, pastikan database dan tabel semua diatur ke Perhatikan bahwa Anda harus menggunakan UTF-8 di level Web BrowserGunakan
Bacaan Lebih Lanjut
Kembali ke atas Dependency InjectionDari Wikipedia:
Kutipan ini membuat konsep terdengar jauh lebih rumit daripada yang sebenarnya. Injeksi Ketergantungan menyediakan komponen dengan dependensinya baik melalui injeksi konstruktor, panggilan metode atau pengaturan properti. Hal ini sederhana itu. Konsep DasarKita dapat menunjukkan konsep dengan contoh sederhana, namun naif. Di sini kita memiliki
Kode ini dapat refactored untuk menggunakan Dependency Injection dan karenanya melonggarkan ketergantungan.
Sekarang kita memberikan Masalah KompleksJika Anda pernah membaca tentang Dependency Injection maka Anda mungkin telah melihat istilah * “Inversion of Control” * atau * “Ketergantungan Inversi Prinsip” *. Ini adalah masalah kompleks yang Dependency Injection memecahkan. Inversion of ControlInversion of Control adalah seperti yang dikatakan, “pembalik kontrol” dari suatu sistem dengan menjaga kontrol organisasi yang sama sekali terpisah dari benda kami. Dalam hal Dependency Injection, ini berarti melonggarkan ketergantungan kita dengan mengendalikan dan instantiating mereka di tempat lain dalam sistem. Selama bertahun-tahun, kerangka kerja PHP telah mencapai Inversion of Control, namun, pertanyaannya menjadi, bagian mana dari kontrol Anda pembalik, dan di mana? Sebagai contoh, kerangka kerja MVC umumnya akan memberikan objek atau basis pengendali super yang lain pengendali harus memperpanjang untuk mendapatkan akses ke dependensinya. Ini ** adalah ** Inversion of Control, namun, bukannya melonggarkan dependensi, metode ini hanya bergerak mereka. Injeksi Ketergantungan memungkinkan kita untuk lebih elegan memecahkan masalah ini dengan hanya menyuntikkan dependensi yang kita butuhkan, ketika kita membutuhkan mereka, tanpa perlu untuk setiap dependensi kode keras sama sekali. Dependency Inversion PrincipleKetergantungan Inversi Prinsip adalah “D” di set SOLID prinsip-prinsip desain berorientasi objek yang menyatakan orang harus
Ada beberapa manfaat bagi Pertimbangkan bahwa Anda bekerja dalam tim dan adaptor sedang dikerjakan oleh seorang rekan. Dalam contoh pertama kita, kita akan memiliki untuk menunggu rekan dikatakan menyelesaikan adaptor sebelum kita benar bisa mengejek itu untuk tes unit kami. Sekarang bahwa ketergantungan adalah sebuah antarmuka / kontrak kita bisa bahagia mengejek antarmuka yang mengetahui bahwa rekan kami akan membangun adaptor berdasarkan kontrak itu. Manfaat yang lebih besar untuk metode ini adalah bahwa kode kita sekarang jauh lebih scalable. Jika tahun ke depan kita memutuskan bahwa kita ingin bermigrasi ke berbagai jenis database, kita dapat menulis sebuah adaptor yang mengimplementasikan antarmuka asli dan menyuntikkan bahwa alih-alih, tidak lebih refactoring akan diperlukan seperti yang kita dapat memastikan bahwa adaptor mengikuti kontrak yang ditetapkan oleh antarmuka. ContainersHal pertama yang harus Anda mengerti tentang Dependency Injection Wadah adalah bahwa mereka tidak sama dengan Dependency Injection. Sebuah wadah adalah utilitas kenyamanan yang membantu kita menerapkan Dependency Injection, bagaimanapun, mereka dapat dan sering disalahgunakan untuk menerapkan anti-pola, Layanan Lokasi. Penyuntikan wadah DI sebagai Layanan Locator ke kelas Anda dibilang menciptakan ketergantungan keras pada wadah dari ketergantungan yang akan diganti. Hal ini juga membuat kode Anda jauh lebih transparan dan akhirnya sulit untuk menguji. Kebanyakan kerangka modern memiliki Dependency Injection Kontainer mereka sendiri yang memungkinkan Anda untuk kawat dependensi Anda bersama-sama melalui konfigurasi. Apa ini berarti dalam prakteknya adalah bahwa Anda dapat menulis kode aplikasi yang bersih dan de-digabungkan sebagai kerangka itu dibangun di atas. Kembali ke atas DatabasesBanyak kali kode PHP Anda akan menggunakan database untuk bertahan informasi . Anda memiliki beberapa pilihan untuk menghubungkan dan berinteraksi dengan database Anda . Pilihan yang dianjurkan until PHP 5.1.0 adalah menggunakan driver asli seperti [ mysql ] [ mysql ] , [ mysqli ] [ mysqli ] , [ pgsql ] [ pgsql ] , dll Driver asli yang besar jika Anda hanya menggunakan SATU database dalam aplikasi Anda , tetapi jika , misalnya , Anda menggunakan MySQL dan sedikit MSSQL , atau Anda perlu menghubungkan ke database Oracle , maka Anda tidak akan dapat menggunakan driver yang sama . Anda akan perlu belajar API baru untuk masing-masing Database - dan yang bisa konyol . Sebagai catatan tambahan pada driver asli , ekstensi mysql untuk PHP tidak lagi aktif dalam pembangunan , dan secara resmi ditinggalkan pada PHP 5.5 , yang berarti bahwa itu akan dihapus dalam beberapa rilis berikutnya . Jika Anda menggunakan ` mysql_connect ( ) ` dan ` mysql_query ( ) ` dalam aplikasi Anda maka Anda akan dihadapkan dengan penulisan ulang di beberapa titik bawah line, sehingga pilihan terbaik adalah untuk menggantikan penggunaan mysql dengan mysqli atau PDO dalam aplikasi Anda dalam jadwal pembangunan Anda sendiri sehingga Anda tidak akan terburu-buru nanti . If Anda memulai dari awal maka benar-benar tidak menggunakan ekstensi mysql : menggunakan [ MySQLi extension ] [ mysqli ] , atau menggunakan PDO.
PDOPDO adalah database perpustakaan koneksi abstraksi - dibangun ke PHP 5.1.0 sejak - yang menyediakan antarmuka umum untuk berbicara dengan banyak database yang berbeda. PDO tidak akan menerjemahkan query SQL atau meniru fitur yang hilang; itu adalah murni untuk menghubungkan ke beberapa jenis database dengan API yang sama. Lebih penting lagi, `` PDO memungkinkan Anda untuk dengan aman menyuntikkan masukan asing (misalnya ID) ke dalam query SQL Anda tanpa khawatir tentang database serangan injeksi SQL. Ini dimungkinkan dengan pernyataan PDO dan parameter terikat. Mari kita asumsikan script PHP menerima ID numerik sebagai parameter permintaan. ID ini harus digunakan untuk mengambil catatan pengguna dari database. Ini adalah
Ini adalah kode yang mengerikan. Anda memasukkan
parameter permintaan mentah menjadi query SQL. Ini akan membuat Anda hack dalam detak jantung. Bayangkan saja jika seorang hacker lewat di parameter inventif
Ini adalah kode yang benar. Ini menggunakan parameter terikat pada pernyataan PDO. Ini lolos ID masukan asing sebelum diperkenalkan ke Database mencegah serangan injeksi SQL potensial.
Anda juga harus menyadari bahwa koneksi database menggunakan sumber daya dan itu tidak pernah terdengar-dari memiliki sumber daya habis jika koneksi tidak secara implisit ditutup, namun ini lebih umum dalam bahasa lain. Menggunakan PDO Anda implisit dapat menutup koneksi dengan menghancurkan objek dengan memastikan semua referensi yang tersisa untuk itu akan dihapus, yaitu diatur ke NULL. Jika Anda tidak melakukan ini secara eksplisit, PHP secara otomatis akan menutup koneksi ketika naskah Anda berakhir - kecuali tentu saja Anda menggunakan koneksi persistent.
Abstraction LayersBanyak kerangka menyediakan lapisan abstraksi mereka sendiri yang mungkin atau mungkin tidak duduk di atas PDO. Ini akan sering meniru fitur untuk satu sistem database yang lain hilang dari yang lain dengan membungkus pertanyaan Anda dalam metode PHP, memberikan Anda abstraksi database sebenarnya. Hal ini tentu saja akan menambah biaya overhead sedikit, tetapi jika Anda sedang membangun sebuah aplikasi portable yang perlu untuk bekerja dengan MySQL, PostgreSQL dan SQLite maka overhead kecil akan sia-sia demi kode kebersihan. Beberapa lapisan abstraksi telah dibangun menggunakan PSR-0 atau PSR-4 standar namespace sehingga dapat diinstal dalam aplikasi apapun yang Anda suka:
Kembali ke atas Errors dan ExceptionsErrorsDalam banyak bahasa pemrograman “pengecualian-berat”, setiap kali ada yang tidak beres pengecualian akan dilempar. ini adalah tentu cara yang layak untuk melakukan hal-hal, tapi PHP adalah bahasa pemrograman “pengecualian-light”. Meskipun tidak memiliki pengecualian dan lebih inti mulai menggunakannya saat bekerja dengan objek, sebagian besar dari PHP itu sendiri akan mencoba untuk menjaga pengolahan terlepas dari apa yang terjadi, kecuali terjadi kesalahan fatal. Sebagai contoh:
Ini hanya kesalahan pemberitahuan, dan PHP akan dengan senang hati melanjutkan. Hal ini dapat membingungkan bagi mereka yang berasal dari “pengecualian-berat” bahasa, karena referensi variabel hilang di Python misalnya akan melemparkan sebuah pengecualian:
Satu-satunya perbedaan yang nyata adalah bahwa Python akan panik atas setiap hal kecil, sehingga pengembang dapat menjadi super yakin setiap masalah potensial atau tepi-kasus tertangkap, sedangkan PHP akan terus pengolahan kecuali sesuatu yang ekstrim terjadi, di mana titik itu akan melemparkan kesalahan dan melaporkannya. Tingkat Keparahan KesalahanPHP memiliki beberapa tingkat keparahan kesalahan. Ketiga jenis yang paling umum dari pesan kesalahan, pemberitahuan dan peringatan.
Ini memiliki berbagai tingkat keparahan; Tipe lain
dari pesan kesalahan yang dilaporkan pada waktu kompilasi adalah pesan Mengubah Perilaku Error Reporting PHPError Reporting dapat diubah dengan menggunakan pengaturan PHP dan / atau panggilan fungsi PHP. Menggunakan built in fungsi PHP
Anda juga dapat mengontrol apakah atau tidak kesalahan ditampilkan ke layar (baik untuk pengembangan) atau disembunyikan, dan login (baik untuk produksi). Untuk informasi lebih lanjut tentang memeriksa Error Reporting bagian ini. Inline Kesalahan SuppressionAnda juga dapat memberitahu PHP untuk menekan kesalahan tertentu dengan Kesalahan Kontrol Operator
Ini akan menampilkan ` $ foo [ ‘ bar ‘ ] ` jika ada , tetapi hanya akan mengembalikan apa-apa batal cetak jika variabel ` $ foo ` atau ` ‘bar’ ` kunci tidak ada. Tanpa operator kontrol kesalahan , ungkapan ini bisa membuat Pemberitahuan ` PHP : Undefined variable : foo ` atau ` Pemberitahuan PHP : Undefined index : bar ` error . Hal ini mungkin tampak seperti ide yang baik , tetapi ada timbal balik yang tidak diinginkan beberapa . PHP menangani ekspresi menggunakan ` @ ` dengan cara yang kurang performant dari ekspresi tanpa ` @ ` . Optimasi prematur mungkin menjadi akar dari semua argumen pemrograman , tetapi jika kinerja ini terutama penting bagi aplikasi Anda / perpustakaan itu penting untuk memahami implikasi kinerja operator kontrol kesalahan itu . Kedua , operator kontrol kesalahan sepenuhnya ** ** menelan kesalahan . Kesalahan tidak ditampilkan , dan kesalahan tidak mengirim ke log error . Juga , sistem PHP saham / produksi tidak memiliki cara untuk mematikan operator kontrol kesalahan . Meskipun Anda mungkin benar bahwa kesalahan yang Anda lihat adalah tidak berbahaya , sebuah , kesalahan kurang berbahaya yang berbeda akan sama diam . Jika ada cara untuk menghindari operator penindasan kesalahan , Anda harus mempertimbangkan itu . Sebagai contoh, kode kita di atas dapat ditulis ulang seperti ini
Salah satu contoh di mana penekanan kesalahan mungkin masuk akal adalah di mana Sebelumnya kami sebutkan tidak ada cara dalam sistem saham PHP untuk mematikan operator kontrol
kesalahan. Namun, Xdebug memiliki Anda juga dapat mengatur nilai ini pada saat runtime dengan `` ini_set fungsi
The “[Berteriak]” ekstensi PHP menawarkan fungsionalitas mirip dengan Xdebug, meskipun inisial pengaturan Scream bernama Ini sangat berguna bila Anda debugging kode dan menduga kesalahan informatif ditekan. Gunakan menjerit dengan hati-hati, dan sebagai alat debugging sementara. Ada banyak kode perpustakaan PHP yang mungkin tidak bekerja dengan operator kontrol kesalahan dinonaktifkan.
ErrorExceptionPHP sangat mampu menjadi bahasa pemrograman “pengecualian-berat”, dan hanya membutuhkan beberapa baris kode untuk membuat saklar. Pada dasarnya Anda dapat membuang “kesalahan” Anda sebagai “pengecualian” menggunakan Ini adalah
praktek umum yang diterapkan oleh sejumlah besar kerangka modern seperti Symfony dan Laravel. Secara default Laravel akan menampilkan semua kesalahan sebagai pengecualian menggunakan Whoops! Paket jika Dengan melempar kesalahan sebagai pengecualian dalam pembangunan Anda dapat menangani mereka lebih baik dari hasil yang biasa, dan jika Anda melihat pengecualian selama pengembangan Anda bisa membungkusnya dalam sebuah pernyataan menangkap dengan petunjuk khusus tentang bagaimana menangani situasi. Setiap pengecualian Anda menangkap langsung membuat aplikasi Anda yang sedikit lebih kuat. Informasi lebih lanjut tentang hal ini dan rincian tentang bagaimana menggunakan
ExceptionsPengecualian adalah bagian standar dari kebanyakan bahasa pemrograman populer, tetapi mereka sering diabaikan oleh programmer PHP . Bahasa seperti Ruby sangat Exception berat , sehingga setiap kali sesuatu yang tidak beres seperti permintaan HTTP gagal , atau query DB tidak beres , atau bahkan jika aset gambar tidak dapat ditemukan , Ruby ( atau permata yang digunakan ) akan memunculkan pengecualian ke layar berarti Anda langsung tahu ada kesalahan . PHP itu sendiri cukup longgar dengan hal ini , dan panggilan untuk ` file_get_contents ( ) ` akan biasanya hanya mendapatkan Anda ` PALSU ` dan peringatan . Banyak kerangka PHP yang lebih tua seperti CodeIgniter hanya akan kembali palsu , log pesan ke log milik mereka dan mungkin membiarkan Anda menggunakan metode seperti ` $ this - > meng-upload - > get_error ( ) ` untuk melihat apa yang salah . Masalahnya di sini adalah bahwa Anda harus pergi mencari kesalahan dan memeriksa dokumentasi untuk melihat apa metode kesalahan adalah untuk kelas ini , bukan karena itu dibuat sangat jelas . Masalah lain adalah ketika kelas secara otomatis melempar kesalahan ke layar dan keluar dari proses. Ketika Anda melakukan ini, Anda menghentikan pengembang lain dari mampu secara dinamis menangani kesalahan itu . Pengecualian harus dibuang untuk membuat pengembang menyadari kesalahan ; mereka kemudian dapat memilih cara untuk menangani hal ini . mis :
SPL ExceptionsGenerik
Ini berarti Anda dapat menambahkan beberapa blok catch dan menangani Pengecualian berbeda berbeda. Hal ini dapat menyebabkan penciptaan banyak </ em> Pengecualian kustom, beberapa di antaranya bisa dihindari dengan menggunakan Pengecualian SPL disediakan dalam SPL extension. Jika misalnya Anda menggunakan
Kembali ke atas KeamananKeamanan Aplikasi WebAda orang jahat siap dan bersedia untuk mengeksploitasi aplikasi web Anda. Adalah penting bahwa Anda mengambil tindakan yang diperlukan untuk mengeraskan keamanan aplikasi web Anda. Untungnya, orang-orang baik di Open Web Application Security Project (OWASP) telah mengumpulkan daftar lengkap dari isu-isu keamanan yang telah diketahui dan metode untuk melindungi diri terhadap mereka. Ini adalah harus dibaca bagi pengembang sadar keamanan.
Password HashingAkhirnya semua orang membangun aplikasi PHP yang bergantung pada pengguna login. Username dan password yang disimpan dalam database dan kemudian digunakan untuk autentikasi pengguna pada saat login. Adalah penting bahwa Anda benar hash password sebelum menyimpannya. Sandi hashing adalah ireversibel, fungsi salah satu cara yang dilakukan terhadap password user. Ini menghasilkan string tetap-panjang yang tidak memungkinkan untuk bisa terbalik. Ini berarti Anda dapat membandingkan hash terhadap yang lain untuk menentukan apakah mereka berdua datang dari sumber string yang sama, tetapi Anda tidak bisa menentukan string asli. Jika password tidak hash dan database Anda diakses oleh pihak ketiga yang tidak sah, semua akun pengguna sekarang dikompromikan. Beberapa pengguna mungkin (sayangnya) menggunakan password yang sama untuk layanan lainnya. Oleh karena itu, penting untuk mengambil keamanan serius. Hashing passwords dengan Dalam PHP 5.5 Di bawah ini kami hash string, dan kemudian memeriksa hash terhadap string baru. Karena kami dua string sumber yang berbeda (‘rahasia-password’ vs ‘buruk-password’) login ini akan gagal.
Data FilteringTidak pernah ( pernah) kepercayaan masukan asing diperkenalkan ke kode PHP Anda . Selalu membersihkan dan memvalidasi masukan asing sebelum menggunakannya dalam kode . The ` filter_var ` dan ` filter_input ` fungsi dapat membersihkan teks dan memvalidasi format teks ( misalnya alamat email ) . Masukan asing bisa apa saja : ` $ _GET ` dan ` $ _POST ` input data form, beberapa nilai dalam ` $ _SERVER ` superglobal , dan HTTP request tubuh melalui ` fopen ( ‘ php :/ / input’ , ‘ r ‘ ) ` . Ingat , masukan asing tidak terbatas untuk membentuk data yang diajukan oleh pengguna . Upload dan download file , nilai session , data cookie , dan data dari layanan web pihak ketiga adalah input asing , juga. Sedangkan data asing dapat disimpan , dikombinasikan , dan diakses kemudian, masih masukan asing . setiap kali Anda memproses , output, menggabungkan , atau menyertakan data dalam kode Anda , tanyakan pada diri Anda apakah Data disaring dengan baik dan hal itu dapat dipercaya . Data dapat filtered berbeda berdasarkan tujuannya . Misalnya, ketika masukan asing tanpa filter dilewatkan menjadi output halaman HTML , dapat mengeksekusi HTML dan JavaScript di situs Anda! Hal ini dikenal sebagai Cross- Site Scripting ( XSS ) dan bisa menjadi serangan yang sangat berbahaya . Salah satu cara untuk menghindari XSS adalah untuk membersihkan semua user-generated data sebelum keluaran ke halaman Anda dengan menghapus tag HTML dengan ` ` strip_tags fungsi atau melarikan diri karakter dengan makna khusus menjadi entitas HTML masing-masing dengan ` htmlentities ` atau ` fungsi htmlspecialchars ` . Contoh lain adalah lewat opsi akan dieksekusi pada baris perintah . Ini bisa sangat berbahaya ( dan biasanya ide yang buruk ) , tetapi Anda dapat menggunakan built -in ` escapeshellarg ` berfungsi untuk membersihkan dieksekusi argumen perintah itu . Salah satu contoh terakhir adalah menerima masukan asing untuk menentukan file untuk memuat dari filesystem . Hal ini dapat dimanfaatkan oleh mengubah nama file ke path file . Anda harus menghapus “ / “ , “ .. / “ , [ nol byte ] [ 6 ] , atau karakter lain dari path file sehingga tidak bisa memuat file tersembunyi , non - publik , atau sensitif .
SanitizationMenghapus Sanitasi (atau lolos) ilegal atau tidak aman karakter dari input asing. Misalnya, Anda harus membersihkan masukan asing sebelum termasuk input dalam HTML atau memasukkan itu menjadi query SQL mentah. Bila Anda menggunakan parameter terikat dengan [PDO] (# database), maka akan membersihkan masukan untuk Anda. Kadang-kadang diperlukan untuk memungkinkan beberapa tag HTML aman di input ketika termasuk dalam HTML halaman. Hal ini sangat sulit untuk dilakukan dan banyak menghindarinya dengan menggunakan format lebih terbatas lainnya seperti Penurunan harga atau BBCode, meskipun membolehkan akses perpustakaan seperti [HTML Purifier] [html-pembersih] ada untuk alasan ini. Lihat Sanitization Filters ValidationValidasi memastikan bahwa masukan asing adalah apa yang Anda harapkan. Sebagai contoh, Anda mungkin ingin untuk memvalidasi alamat email, nomor telepon, atau usia saat memproses pengajuan pendaftaran. Lihat Validation Filters File KonfigurasiKetika membuat file konfigurasi untuk aplikasi Anda, praktik terbaik merekomendasikan bahwa salah satu metode berikut harus diikuti:
Register Globals** CATATAN: ** Pada PHP 5.4.0 yang Bila diaktifkan, Sebagai contoh:
Error ReportingError logging dapat berguna dalam menemukan titik masalah dalam aplikasi Anda, tetapi juga dapat mengekspos informasi tentang struktur aplikasi Anda ke dunia luar. Untuk secara efektif melindungi aplikasi Anda dari masalah yang bisa disebabkan oleh output dari pesan-pesan ini, Anda perlu mengkonfigurasi server Anda berbeda dalam pembangunan dibandingkan produksi (hidup). DevelopmentUntuk menampilkan setiap kesalahan yang mungkin selama pengembangan </ strong>,
mengkonfigurasi pengaturan berikut dalam
Tingkat ** Pelaporan setiap kemungkinan kesalahan dengan versi PHP **
ProductionUntuk menyembunyikan kesalahan pada produksi Anda </ strong> lingkungan,
mengkonfigurasi
Dengan pengaturan ini dalam produksi, kesalahan masih akan login ke error log untuk server web, tetapi tidak akan ditampilkan kepada pengguna. Untuk informasi lebih lanjut tentang pengaturan ini, lihat manual PHP:
Kembali ke atas TestingMenulis tes otomatis untuk kode PHP Anda dianggap sebagai praktek terbaik dan dapat menyebabkan tegap aplikasi. Tes otomatis adalah alat yang hebat untuk memastikan aplikasi Anda tidak pecah ketika Anda membuat perubahan atau menambahkan fungsi baru dan tidak boleh diabaikan. Ada beberapa jenis alat pengujian (atau kerangka kerja) yang tersedia untuk PHP, yang menggunakan pendekatan yang berbeda - yang semuanya berusaha untuk menghindari pengujian manual dan kebutuhan untuk besar Tim Quality Assurance, hanya untuk membuat perubahan terbaru yakin tidak mematahkan fungsi yang ada. Test Driven DevelopmentFrom Wikipedia:
Ada beberapa jenis pengujian yang dapat Anda lakukan untuk aplikasi Anda Unit TestingUnit Testing adalah pendekatan pemrograman untuk memastikan fungsi , kelas dan metode bekerja sebagai diharapkan , dari titik Anda membangun mereka semua jalan melalui siklus pengembangan . dengan memeriksa nilai-nilai akan masuk dan keluar dari berbagai fungsi dan metode , Anda dapat memastikan logika internal bekerja dengan benar . Dengan menggunakan Dependency Injection dan membangun “ tiruan “ kelas dan bertopik Anda dapat memverifikasi bahwa dependensi yang benar digunakan untuk cakupan tes lebih baik . Ketika Anda membuat sebuah kelas atau fungsi Anda harus membuat unit test untuk setiap perilaku itu harus memiliki . Pada tingkat yang sangat dasar Anda harus membuat kesalahan yakin jika Anda mengirim argumen buruk dan pastikan bekerja jika Anda mengirim argumen yang valid . Hal ini akan membantu memastikan bahwa ketika Anda membuat perubahan ke kelas ini atau fungsi nanti dalam pengembangan siklus yang fungsi lama terus bekerja seperti yang diharapkan . Satu-satunya alternatif untuk ini akan menjadi var_dump ( ) dalam test.php , yang ada cara untuk membangun sebuah aplikasi - besar atau kecil . Penggunaan lainnya untuk tes unit memberikan kontribusi ke open source . Jika Anda dapat menulis sebuah tes yang menunjukkan rusak fungsi ( yaitu gagal ) , kemudian memperbaikinya , dan menunjukkan tes passing , patch jauh lebih mungkin untuk dapat diterima . jika Anda menjalankan sebuah proyek yang menerima permintaan menarik maka Anda harus menunjukkan ini sebagai suatu kebutuhan. [ PHPUnit ] ( http://phpunit.de ) adalah kerangka pengujian de - facto untuk menulis unit test untuk PHP aplikasi , tetapi ada beberapa alternatif
Integration TestingFrom Wikipedia:
Banyak alat yang sama yang dapat digunakan untuk unit testing dapat digunakan untuk pengujian integrasi sebanyak prinsip-prinsip yang sama digunakan. Functional TestingKadang-kadang juga dikenal sebagai pengujian penerimaan, uji fungsional terdiri dari menggunakan alat-alat untuk membuat otomatis tes yang benar-benar menggunakan aplikasi Anda, bukan hanya memverifikasi bahwa unit individu kode berperilaku benar dan bahwa unit individu dapat berbicara satu sama lain dengan benar. Alat-alat ini biasanya bekerja menggunakan real data dan simulasi pengguna yang sebenarnya dari aplikasi. Functional Testing Tools
Behavior Driven DevelopmentAda dua jenis Perilaku-Driven Development (BDD): SpecBDD dan StoryBDD. SpecBDD berfokus pada perilaku teknis kode, sementara StoryBDD berfokus pada bisnis atau fitur perilaku atau interaksi. PHP memiliki kerangka kerja untuk kedua jenis BDD. Dengan StoryBDD, Anda menulis cerita terbaca-manusia yang menggambarkan perilaku aplikasi Anda. cerita-cerita ini kemudian dapat dijalankan sebagai tes yang sebenarnya terhadap aplikasi Anda. Kerangka yang digunakan dalam aplikasi PHP untuk StoryBDD adalah Behat, yang terinspirasi oleh [Ketimun] (http://cukes.info/) proyek Ruby dan menerapkan DSL Gherkin untuk menggambarkan perilaku fitur. Dengan SpecBDD, Anda menulis spesifikasi yang menggambarkan bagaimana kode Anda yang sebenarnya harus bersikap. Alih-alih pengujian fungsi atau metode, Anda gambarkan bagaimana fungsi atau metode harus bersikap. PHP menawarkan kerangka PHPSpec untuk tujuan ini. Kerangka kerja ini terinspirasi oleh [RSpec proyek] (http://rspec.info/) untuk Ruby. BDD Links
Kembali ke atas Servers dan DeploymentAplikasi PHP dapat digunakan dan dijalankan pada server web produksi dalam beberapa cara. Platform as a Service (PaaS)PaaS menyediakan sistem dan arsitektur jaringan yang diperlukan untuk menjalankan aplikasi PHP di web. Ini berarti sedikit atau tidak ada konfigurasi untuk meluncurkan aplikasi PHP atau kerangka kerja PHP. Baru-baru ini PaaS telah menjadi metode populer untuk menyebarkan, hosting, dan skala aplikasi PHP dari semua ukuran. Anda dapat menemukan daftar [PHP PaaS “Platform sebagai Service” penyedia] (# php_paas_providers) di kami [sumber section] (# sumber daya). Virtual atau Dedicated ServersJika Anda merasa nyaman dengan sistem administrasi, atau tertarik untuk belajar itu, server virtual atau dedicated memberikan kontrol penuh terhadap lingkungan produksi aplikasi Anda. nginx dan PHP-FPMPHP, PHP melalui built-in FastCGI Process Manager (FPM), pasangan benar-benar baik dengan [nginx] (http://nginx.org), yang merupakan ringan, kinerja tinggi server web. Ini menggunakan memori kurang dari Apache dan lebih baik dapat menangani permintaan lebih bersamaan. Hal ini sangat penting pada server virtual yang tidak memiliki banyak memori untuk cadangan.
Apache dan PHPPHP dan Apache memiliki sejarah panjang bersama-sama . Apache adalah liar dikonfigurasi dan memiliki banyak tersedia [ modul ] ( http://httpd.apache.org/docs/2.4/mod/ ) untuk memperluas fungsi . Ini adalah pilihan populer untuk server bersama dan setup yang mudah untuk kerangka kerja PHP dan aplikasi open source seperti WordPress . Sayangnya , Apache menggunakan sumber daya lebih dari nginx secara default dan tidak dapat menangani banyak pengunjung pada saat yang sama . Apache memiliki beberapa konfigurasi yang mungkin untuk menjalankan PHP . Yang paling umum dan paling mudah untuk setup adalah [ prefork MPM ] ( http://httpd.apache.org/docs/2.4/mod/prefork.html ) dengan mod_php5 . Meskipun bukan yang paling efisien memori , itu adalah yang paling sederhana untuk mendapatkan kerja dan digunakan. Ini mungkin adalah pilihan terbaik jika Anda tidak ingin menggali terlalu dalam ke aspek administrasi server . Catatan bahwa jika Anda menggunakan mod_php5 Anda harus menggunakan prefork MPM . Atau, jika Anda ingin memeras lebih banyak kinerja dan stabilitas dari Apache maka Anda dapat mengambil keuntungan dari sistem FPM sama seperti nginx dan menjalankan [ pekerja MPM ] ( http://httpd.apache.org/docs/2.4/mod/ worker.html ) atau [ event MPM ] ( http://httpd.apache.org/docs/2.4/mod/event.html ) dengan mod_fastcgi atau mod_fcgid . Konfigurasi ini akan secara signifikan lebih banyak memori efisien dan jauh lebih cepat tetapi lebih banyak pekerjaan untuk mengatur .
Building dan DeployingJika Anda menemukan diri Anda melakukan petunjuk basis data perubahan skema atau menjalankan tes secara manual sebelum memperbarui file Anda (manual), berpikir dua kali! Dengan setiap tugas petunjuk tambahan yang diperlukan untuk menyebarkan versi baru dari aplikasi Anda, peluang untuk kesalahan fatal meningkat. Apakah Anda sedang berhadapan dengan update sederhana, proses membangun komprehensif atau bahkan strategi integrasi berkesinambungan, [membangun otomatisasi] (http://en.wikipedia.org/wiki/Build_automation) adalah Anda teman. Di antara tugas-tugas Anda mungkin ingin untuk mengotomatisasi adalah:
Build Automation ToolsMembangun alat dapat digambarkan sebagai kumpulan skrip yang menangani tugas-tugas umum dari penyebaran perangkat lunak . membangun alat bukan merupakan bagian dari perangkat lunak Anda , itu bekerja pada perangkat lunak Anda dari ‘ luar ‘ . Ada banyak tools open source yang tersedia untuk membantu Anda dengan membangun otomatisasi , beberapa ditulis dalam PHP yang lain tidak . Hal ini seharusnya tidak menghambat Anda dari menggunakan mereka , jika mereka lebih cocok untuk pekerjaan tertentu . Berikut adalah beberapa contoh : [ Phing ] ( http://www.phing.info/ ) adalah cara termudah untuk memulai dengan penyebaran otomatis di dunia PHP . dengan Phing Anda dapat mengontrol kemasan , penyebaran atau proses pengujian dari dalam sederhana membangun file XML . Phing (yang didasarkan pada [ Apache Ant ] ( http://ant.apache.org/ ) ) menyediakan kaya set tugas biasanya diperlukan untuk menginstal atau memperbarui aplikasi web dan dapat diperpanjang dengan tugas-tugas tambahan lain , yang ditulis dalam PHP . [ Capistrano ] ( https://github.com/capistrano/capistrano/wiki ) adalah sistem untuk * menengah hingga lanjutan programmer * untuk mengeksekusi perintah dengan cara yang terstruktur berulang pada satu atau lebih mesin remote . Hal ini pra - dikonfigurasi untuk menyebarkan Ruby on Rails aplikasi , namun orang ** berhasil menyebarkan sistem PHP ** dengan itu . Keberhasilan penggunaan Capistrano tergantung pada pengetahuan tentang Ruby dan Rake . Posting blog dave Gardner [ PHP Deployment dengan Capistrano ] ( http://www.davegardner.me.uk/blog/2012/02/13/php-deployment-with-capistrano/ ) adalah titik awal yang baik untuk pengembang PHP tertarik Capistrano . [ Chef ] ( http://www.opscode.com/chef/ ) lebih dari kerangka penyebaran , itu adalah sistem berbasis Ruby sangat kuat kerangka integrasi yang tidak hanya menyebarkan aplikasi Anda, tetapi dapat membangun lingkungan server seluruh atau kotak virtual. Sumber daya koki untuk pengembang PHP :
Bacaan lebih lanjut :
Continuous Integration
– Martin Fowler Ada berbagai cara untuk menerapkan integrasi berkesinambungan untuk PHP. Baru-baru ini [Travis CI] (https://travis-ci.org/) memiliki melakukan pekerjaan yang besar membuat integrasi berkesinambungan kenyataan bahkan untuk proyek-proyek kecil. Travis CI adalah host kontinyu layanan integrasi untuk komunitas open source. Hal ini terintegrasi dengan GitHub dan menawarkan dukungan kelas pertama bagi banyak bahasa termasuk PHP. Bacaan lebih lanjut:
Kembali ke atas CachingPHP cukup cepat dengan sendirinya, namun kemacetan dapat muncul ketika Anda membuat koneksi remote, load file, dll Untungnya, ada berbagai alat yang tersedia untuk mempercepat bagian-bagian tertentu dari aplikasi Anda, atau mengurangi jumlah kali ini berbagai tugas memakan waktu perlu menjalankan. Bytecode CacheBila file PHP dijalankan , di bawah tenda itu pertama kali dikompilasi untuk bytecode ( juga dikenal sebagai opcode ) dan , hanya kemudian , bytecode dijalankan . Jika sebuah file PHP tidak diubah , bytecode akan selalu sama . Ini berarti bahwa langkah kompilasi adalah pemborosan sumber daya CPU . Di sinilah Bytecode Cache masuk Ini mencegah kompilasi berlebihan dengan menyimpan bytecode dalam memori dan menggunakan kembali pada panggilan berturut-turut . Menyiapkan bytecode cache hitungan menit , dan aplikasi Anda akan mempercepat secara signifikan . Ada benar-benar ada alasan untuk tidak menggunakannya . Pada PHP 5.5 , ada cache bytecode built -in yang disebut [ OPcache ] ( http://php.net/manual/en/book.opcache.php ) . ini adalah juga tersedia untuk versi sebelumnya . Lain populer bytecode cache adalah :
Object CachingAda saat-saat itu dapat bermanfaat untuk cache objek individu dalam kode Anda , seperti dengan data yang mahal untuk mendapatkan atau database panggilan di mana hasilnya tidak mungkin berubah . Anda dapat menggunakan software object caching untuk menahan ini potongan data dalam memori untuk akses yang sangat cepat di kemudian hari . Jika Anda menyimpan barang-barang ini untuk menyimpan data setelah Anda mengambil mereka , kemudian menarik mereka langsung dari cache untuk permintaan berikut , Anda bisa mendapatkan peningkatan yang signifikan dalam kinerja serta mengurangi beban pada server database Anda . Banyak solusi bytecode caching populer membiarkan Anda cache data kustom juga, jadi ada lebih banyak alasan untuk mengambil keuntungan dari mereka . APCu , XCache , dan WinCache semua menyediakan API untuk menyimpan data dari kode PHP Anda ke cache memori mereka . Objek memori sistem caching yang paling sering digunakan adalah APCu dan memcached . APCu adalah pilihan yang sangat baik untuk objek caching , itu termasuk API sederhana untuk menambahkan data Anda sendiri ke cache memory dan sangat mudah untuk setup dan menggunakan . itu satu batasan nyata APCu adalah bahwa hal itu terikat ke server itu diinstal pada . Memcached di sisi lain dipasang sebagai layanan terpisah dan dapat diakses di seluruh jaringan , yang berarti bahwa Anda dapat menyimpan objek dalam data yang hyper-fast toko di lokasi pusat dan sistem yang berbeda dapat menarik dari itu . Perhatikan bahwa ketika menjalankan PHP sebagai ( Cepat - ) aplikasi CGI dalam server Web Anda, setiap proses PHP akan memiliki sendiri cache, yaitu APCu data tidak dibagi antara proses kerja Anda . Dalam kasus ini , Anda mungkin ingin mempertimbangkan untuk menggunakan memcached sebaliknya, karena tidak terikat dengan proses PHP . Dalam konfigurasi jaringan APCu biasanya akan mengungguli memcached dalam hal kecepatan akses , tapi memcached akan dapat untuk meningkatkan lebih cepat dan lebih lanjut . Jika Anda tidak berharap untuk memiliki beberapa server menjalankan aplikasi Anda , atau tidak perlu fitur tambahan yang memcached penawaran maka APCu mungkin pilihan terbaik Anda untuk objek caching . Contoh logika menggunakan APCu :
Perhatikan bahwa sebelum PHP 5.5, APC menyediakan kedua cache objek dan cache bytecode. APCu adalah sebuah proyek untuk membawa APC object cache PHP 5.5 +, karena PHP sekarang memiliki cache bytecode built-in (OPcache). Learn more about popular object caching systems:
Kembali ke atas FrameworksDaripada menemukan kembali roda , banyak pengembang PHP menggunakan kerangka kerja untuk membangun aplikasi web . Kerangka abstrak pergi banyak keprihatinan tingkat rendah dan memberikan membantu, mudah digunakan antarmuka untuk menyelesaikan tugas-tugas umum . Anda tidak perlu menggunakan kerangka kerja untuk setiap proyek . PHP kadang-kadang polos adalah cara yang tepat untuk pergi , tetapi jika Anda memerlukan kerangka maka ada tiga jenis utama yang tersedia :
Micro - kerangka dasarnya pembungkus untuk rute permintaan HTTP ke callback , controller, metode , dll secepat mungkin , dan kadang-kadang datang dengan perpustakaan beberapa tambahan untuk membantu pembangunan seperti pembungkus database dasar dan sejenisnya . Mereka jelas digunakan untuk membangun layanan HTTP terpencil . Banyak kerangka menambahkan sejumlah besar fitur di atas dari apa yang tersedia dalam mikro - kerangka dan ini dikenal Full- Stack Frameworks . Ini sering datang dibundel dengan ORMs , paket Authentication , dll Kerangka kerja berbasis komponen adalah koleksi khusus dan single- tujuan perpustakaan . Kerangka berbasis komponen yang berbeda dapat digunakan bersama-sama untuk membuat mikro atau kerangka kerja full- stack.
ComponentsSeperti disebutkan di atas “Komponen” adalah pendekatan lain untuk tujuan bersama untuk menciptakan, mendistribusikan dan mengimplementasikan kode bersama. berbagai repositori komponen yang ada, dua utama yaitu:
Kedua repositori ini memiliki alat baris perintah yang terkait dengan mereka untuk membantu instalasi dan upgrade proses, dan telah dijelaskan secara lebih rinci dalam [Manajemen Ketergantungan] bagian. Ada juga kerangka kerja berbasis komponen dan komponen-vendor yang menawarkan tidak ada kerangka kerja sama sekali. Proyek-proyek ini memberikan sumber lain dari paket yang idealnya memiliki sedikit atau tidak ada ketergantungan pada paket lain, atau kerangka kerja tertentu. Sebagai contoh, Anda dapat menggunakan [paket FuelPHP Validasi], tanpa perlu menggunakan kerangka FuelPHP itu sendiri.
Laravel’s Illuminate components akan menjadi lebih baik dipisahkan dari kerangka Laravel. Untuk saat ini, hanya komponen terbaik dipisahkan dari kerangka Laravel tercantum above. BukuAda banyak buku sekitar untuk PHP tapi ada pula yang sayangnya sekarang cukup lama dan tidak ada lagi mengandung informasi yang akurat. Bahkan ada buku yang diterbitkan untuk “PHP 6” yang tidak ada, apa pun mungkin tidak sekarang pernah ada karena buku-buku. Bagian ini bertujuan untuk menjadi dokumen hidup untuk buku-buku yang dianjurkan pada PHP pembangunan pada umumnya. Jika Anda ingin buku Anda yang akan ditambahkan, mengirim PR dan itu akan ditinjau untuk relevansi. Buku Gratis
Buku Berbayar
Kembali ke atas Kembali ke atas |