Apakah php diperlukan untuk sql?

Ada banyak informasi usang di Web yang menyesatkan pengguna PHP baru, menyebarkan praktik buruk dan kode tidak aman. PHP. The Right Way adalah referensi cepat dan mudah dibaca untuk standar pengkodean populer PHP, tautan ke tutorial otoritatif di Web, dan apa yang kontributor anggap sebagai praktik terbaik saat ini

Show

Tidak ada cara kanonik untuk menggunakan PHP. Situs web ini bertujuan untuk memperkenalkan pengembang PHP baru ke beberapa topik yang mungkin tidak mereka temukan sampai terlambat, dan bertujuan untuk memberikan beberapa ide segar kepada para profesional berpengalaman tentang topik yang telah mereka lakukan selama bertahun-tahun tanpa pernah mempertimbangkan kembali. Situs web ini juga tidak akan memberi tahu Anda alat mana yang harus digunakan, melainkan menawarkan saran untuk beberapa opsi, jika memungkinkan menjelaskan perbedaan dalam pendekatan dan kasus penggunaan

Ini adalah dokumen hidup dan akan terus diperbarui dengan informasi dan contoh yang lebih bermanfaat saat tersedia

Terjemahan

PHP. Jalan yang Benar diterjemahkan ke dalam berbagai bahasa

Buku

PHP versi terbaru. Cara yang Benar juga tersedia dalam format PDF, EPUB, dan MOBI. Pergi ke Leanpub

Bagaimana Berkontribusi

Bantu jadikan situs web ini sumber daya terbaik untuk pemrogram PHP baru. Berkontribusi di GitHub

Gunakan Versi Stabil Saat Ini (8. 2)

Jika Anda memulai dengan PHP, mulailah dengan rilis stabil PHP 8 saat ini. 2. PHP 8. x menambahkan banyak di atas 7 yang lebih tua. x dan 5. versi x. Mesinnya sebagian besar telah ditulis ulang, dan PHP sekarang bahkan lebih cepat daripada versi sebelumnya. PHP 8 adalah pembaruan utama bahasa dan berisi banyak fitur dan pengoptimalan baru

Anda harus mencoba memutakhirkan ke versi stabil terbaru dengan cepat - PHP 7. 4 sudah Akhir Kehidupan. Memutakhirkan itu mudah, karena tidak banyak kerusakan kompatibilitas mundur PHP 8. 0, PHP8. 1, PHP8. 2. Jika Anda tidak yakin versi mana dari suatu fungsi atau fitur, Anda dapat memeriksa dokumentasi PHP di php. situs bersih

Server web bawaan

Dengan PHP5. 4 atau lebih baru, Anda dapat mulai mempelajari PHP tanpa menginstal dan mengonfigurasi server web lengkap. Untuk memulai server, jalankan perintah berikut dari terminal Anda di root web proyek Anda

> php -S localhost:8000

Pengaturan Mac

macOS sudah dikemas dengan PHP tetapi biasanya sedikit di belakang rilis stabil terbaru. Ada beberapa cara untuk menginstal versi PHP terbaru di macOS

Instal PHP melalui Homebrew

Homebrew adalah pengelola paket untuk macOS yang membantu Anda menginstal PHP dan berbagai ekstensi dengan mudah. Repositori inti Homebrew menyediakan "formula" untuk PHP 7. 4, 8. 0, 8. 1 dan PHP8. 2. Instal versi terbaru dengan perintah ini

Anda dapat beralih di antara versi PHP Homebrew dengan memodifikasi variabel

phpcbf -w --standard=PSR1 file.php
3 Anda. Sebagai alternatif, Anda dapat menggunakan brew-php-switcher untuk mengganti versi PHP secara otomatis

Anda juga dapat beralih antar versi PHP secara manual dengan membatalkan tautan dan menautkan versi yang diinginkan

brew unlink php
brew link --overwrite [email protected]

brew unlink php
brew link --overwrite [email protected]

Instal PHP melalui Macports

Proyek MacPorts adalah inisiatif komunitas sumber terbuka untuk merancang sistem yang mudah digunakan untuk mengkompilasi, menginstal, dan memutakhirkan perangkat lunak sumber terbuka berbasis baris perintah, X11 atau Aqua pada sistem operasi OS X

MacPorts mendukung binari yang telah dikompilasi sebelumnya, jadi Anda tidak perlu mengkompilasi ulang setiap dependensi dari file tarball sumber, ini menyelamatkan hidup Anda jika Anda tidak memiliki paket apa pun yang terinstal di sistem Anda

Pada titik ini, Anda dapat menginstal

phpcbf -w --standard=PSR1 file.php
4,
phpcbf -w --standard=PSR1 file.php
5,
phpcbf -w --standard=PSR1 file.php
6,
phpcbf -w --standard=PSR1 file.php
7,
phpcbf -w --standard=PSR1 file.php
8,
php-cs-fixer fix -v --rules=@PSR1 file.php
9,
php-cs-fixer fix -v --rules=@PSR1 file.php
,
php-cs-fixer fix -v --rules=@PSR1 file.php
1,
php-cs-fixer fix -v --rules=@PSR1 file.php
2,
php-cs-fixer fix -v --rules=@PSR1 file.php
________ ________10____1111111

sudo port install php74
sudo port install php82

Dan Anda dapat menjalankan perintah

php-cs-fixer fix -v --rules=@PSR1 file.php
_6 untuk mengganti PHP aktif Anda

sudo port select --set php php82

Instal PHP melalui phpbrew

phpbrew adalah alat untuk menginstal dan mengelola beberapa versi PHP. Ini bisa sangat berguna jika dua aplikasi/proyek yang berbeda memerlukan versi PHP yang berbeda, dan Anda tidak menggunakan mesin virtual

Instal PHP melalui penginstal biner Liip

Opsi populer lainnya adalah php-osx. liip. ch yang menyediakan metode instalasi satu liner untuk versi 5. 3 sampai 7. 3. Itu tidak menimpa binari PHP yang diinstal oleh Apple, tetapi menginstal semuanya di lokasi terpisah (/usr/local/php5)

Kompilasi dari Sumber

Opsi lain yang memberi Anda kendali atas versi PHP yang Anda instal, adalah mengkompilasinya sendiri. Dalam hal ini, pastikan untuk menginstal Xcode atau "Alat Baris Perintah untuk XCode" pengganti Apple yang dapat diunduh dari Pusat Pengembang Mac Apple

Pemasang All-in-One

Solusi yang tercantum di atas terutama menangani PHP itu sendiri, dan tidak menyediakan hal-hal seperti Apache, Nginx, atau server SQL. Solusi "All-in-one" seperti MAMP dan XAMPP akan menginstal perangkat lunak lain ini untuk Anda dan menyatukan semuanya, tetapi kemudahan penyiapan disertai dengan trade-off fleksibilitas

Pengaturan Windows

Anda dapat mengunduh binari dari windows. php. bersih/unduh. Setelah ekstraksi PHP, disarankan untuk mengatur PATH ke root folder PHP Anda (di mana php. exe terletak) sehingga Anda dapat menjalankan PHP dari mana saja

Untuk pembelajaran dan pengembangan lokal, Anda dapat menggunakan webserver bawaan dengan PHP 5. 4+ sehingga Anda tidak perlu khawatir untuk mengonfigurasinya. Jika Anda menginginkan "all-in-one" yang menyertakan server web lengkap dan MySQL juga, maka alat seperti XAMPP, EasyPHP, OpenServer, dan WAMP akan membantu membuat lingkungan pengembangan Windows aktif dan berjalan cepat. Meskipun demikian, alat ini akan sedikit berbeda dari produksi, jadi berhati-hatilah dengan perbedaan lingkungan jika Anda bekerja di Windows dan menerapkannya ke Linux

Jika Anda perlu menjalankan sistem produksi Anda di Windows, maka IIS7 akan memberi Anda kinerja paling stabil dan terbaik. Anda dapat menggunakan phpmanager (plugin GUI untuk IIS7) untuk membuat konfigurasi dan pengelolaan PHP sederhana. IIS7 hadir dengan FastCGI bawaan dan siap digunakan, Anda hanya perlu mengonfigurasi PHP sebagai penangan. Untuk dukungan dan sumber daya tambahan ada area khusus di iis. bersih untuk PHP

Generally running your application on different environment in development and production can lead to strange bugs popping up when you go live. If you are developing on Windows and deploying to Linux (or anything non-Windows) then you should consider using a

Chris Tankersley has a very helpful blog post on what tools he uses to do PHP development using Windows

Common Directory structure

A common question among those starting out with writing programs for the web is, “where do I put my stuff?” Over the years, this answer has consistently been “where the

php-cs-fixer fix -v --rules=@PSR1 file.php
7 is. ” Although this answer is not complete, it’s a great place to start

For security reasons, configuration files should not be accessible by a site’s visitors; therefore, public scripts are kept in a public directory and private configurations and data are kept outside of that directory

For each team, CMS, or framework one works in, a standard directory structure is used by each of those entities. However, if one is starting a project alone, knowing which filesystem structure to use can be daunting

Paul M. Jones has done some fantastic research into common practices of tens of thousands of github projects in the realm of PHP. He has compiled a standard file and directory structure, the Standard PHP Package Skeleton, based on this research. In this directory structure,

php-cs-fixer fix -v --rules=@PSR1 file.php
7 should point to
php-cs-fixer fix -v --rules=@PSR1 file.php
9, unit tests should be in the
> php -i
0 directory, and third party libraries, as installed by , belong in the
> php -i
1 directory. For other files and directories, abiding by the Standard PHP Package Skeleton will make the most sense to contributors of a project

The PHP community is large and diverse, composed of innumerable libraries, frameworks, and components. It is common for PHP developers to choose several of these and combine them into a single project. It is important that PHP code adheres (as close as possible) to a common code style to make it easy for developers to mix and match various libraries for their projects

The Framework Interop Group has proposed and approved a series of style recommendations. Not all of them relate to code-style, but those that do are PSR-1, PSR-12 and PSR-4. These recommendations are merely a set of rules that many projects like Drupal, Zend, Symfony, Laravel, CakePHP, phpBB, AWS SDK, FuelPHP, Lithium, etc. are adopting. You can use them for your own projects, or continue to use your own personal style

Ideally, you should write PHP code that adheres to a known standard. This could be any combination of PSRs, or one of the coding standards made by PEAR or Zend. This means other developers can easily read and work with your code, and applications that implement the components can have consistency even when working with lots of third-party code

You can use PHP_CodeSniffer to check code against any one of these recommendations, and plugins for text editors like Sublime Text to be given real-time feedback

You can fix the code layout automatically by using one of the following tools

And you can run phpcs manually from shell

phpcs -sw --standard=PSR1 file.php

It will show errors and describe how to fix them. It can also be helpful to include this command in a git hook. That way, branches which contain violations against the chosen standard cannot enter the repository until those violations have been fixed

If you have PHP_CodeSniffer, then you can fix the code layout problems reported by it, automatically, with the PHP Code Beautifier and Fixer

phpcbf -w --standard=PSR1 file.php

Another option is to use the PHP Coding Standards Fixer. It will show what kind of errors the code structure had before it fixed them

php-cs-fixer fix -v --rules=@PSR1 file.php

English is preferred for all symbol names and code infrastructure. Comments may be written in any language easily readable by all current and future parties who may be working on the codebase

Finally, a good supplementary resource for writing clean PHP code is Clean Code PHP

Programming Paradigms

PHP is a flexible, dynamic language that supports a variety of programming techniques. It has evolved dramatically over the years, notably adding a solid object-oriented model in PHP 5. 0 (2004), anonymous functions and namespaces in PHP 5. 3 (2009), and traits in PHP 5. 4 (2012)

Object-oriented Programming

PHP memiliki sekumpulan fitur pemrograman berorientasi objek yang sangat lengkap termasuk dukungan untuk kelas, kelas abstrak, antarmuka, pewarisan, konstruktor, kloning, pengecualian, dan lainnya

Pemrograman Fungsional

PHP mendukung fungsi kelas satu, yang berarti bahwa suatu fungsi dapat ditugaskan ke variabel. Fungsi yang ditentukan pengguna dan bawaan dapat direferensikan oleh variabel dan dipanggil secara dinamis. Fungsi dapat diteruskan sebagai argumen ke fungsi lain (fitur yang disebut Fungsi Tingkat Tinggi) dan fungsi dapat mengembalikan fungsi lain

Rekursi, fitur yang memungkinkan suatu fungsi memanggil dirinya sendiri, didukung oleh bahasa, tetapi sebagian besar kode PHP difokuskan pada iterasi

Fungsi anonim baru (dengan dukungan untuk penutupan) hadir sejak PHP 5. 3 (2009)

PHP5. 4 menambahkan kemampuan untuk mengikat penutupan ke ruang lingkup objek dan juga meningkatkan dukungan untuk callable sehingga dapat digunakan secara bergantian dengan fungsi anonim di hampir semua kasus

PHP mendukung berbagai bentuk pemrograman meta melalui mekanisme seperti API Refleksi dan Metode Ajaib. Ada banyak Metode Ajaib yang tersedia seperti

> php -i
_2,
> php -i
3,
> php -i
4,
> php -i
5,
> php -i
6, dll. yang memungkinkan pengembang untuk terhubung ke perilaku kelas. Pengembang Ruby sering mengatakan bahwa PHP kurang
> php -i
7, tetapi tersedia sebagai
> php -i
8 dan
> php -i
9

Ruang nama

Seperti disebutkan di atas, komunitas PHP memiliki banyak pengembang yang membuat banyak kode. Ini berarti bahwa kode PHP satu perpustakaan mungkin menggunakan nama kelas yang sama dengan yang lain. Saat kedua pustaka digunakan dalam namespace yang sama, keduanya bertabrakan dan menimbulkan masalah

Ruang nama memecahkan masalah ini. Seperti yang dijelaskan dalam manual referensi PHP, ruang nama dapat dibandingkan dengan direktori sistem operasi yang file ruang nama; . Demikian pula, dua kelas PHP dengan nama yang sama dapat hidup berdampingan di ruang nama PHP yang terpisah. Sesederhana itu

Penting bagi Anda untuk memberi nama kode Anda sehingga dapat digunakan oleh pengembang lain tanpa takut bertabrakan dengan perpustakaan lain

Salah satu cara yang disarankan untuk menggunakan ruang nama diuraikan dalam PSR-4, yang bertujuan untuk menyediakan konvensi file, kelas, dan ruang nama standar untuk memungkinkan kode plug-and-play

Pada Oktober 2014, PHP-FIG menghentikan standar pemuatan otomatis sebelumnya. PSR-0. Baik PSR-0 dan PSR-4 masih dapat digunakan dengan sempurna. Yang terakhir membutuhkan PHP 5. 3, begitu banyak PHP5. Proyek 2-saja menerapkan PSR-0

Jika Anda akan menggunakan standar autoloader untuk aplikasi atau paket baru, lihat PSR-4

Perpustakaan PHP Standar

Standard PHP Library (SPL) dikemas dengan PHP dan menyediakan kumpulan kelas dan antarmuka. Itu terdiri terutama dari kelas struktur data yang umum dibutuhkan (tumpukan, antrian, tumpukan, dan sebagainya), dan iterator yang dapat melintasi struktur data ini atau kelas Anda sendiri yang mengimplementasikan antarmuka SPL

Antarmuka Baris Perintah

PHP dibuat untuk menulis aplikasi web, tetapi juga berguna untuk scripting program antarmuka baris perintah (CLI). Program PHP baris perintah dapat membantu mengotomatiskan tugas-tugas umum seperti pengujian, penerapan, dan administrasi aplikasi

Program CLI PHP sangat kuat karena Anda dapat menggunakan kode aplikasi Anda secara langsung tanpa harus membuat dan mengamankan GUI web untuk itu. Pastikan untuk tidak meletakkan skrip CLI PHP Anda di root web publik Anda

Coba jalankan PHP dari baris perintah Anda

> php -i

Opsi

" . PHP_EOL;
    exit(1);
}
$name = $argv[1];
echo "Hello, $name" . PHP_EOL;
_0 akan mencetak konfigurasi PHP Anda seperti fungsi
" . PHP_EOL;
    exit(1);
}
$name = $argv[1];
echo "Hello, $name" . PHP_EOL;
1

Opsi

" . PHP_EOL;
    exit(1);
}
$name = $argv[1];
echo "Hello, $name" . PHP_EOL;
_2 menyediakan shell interaktif, mirip dengan IRB Ruby atau shell interaktif python. Ada sejumlah opsi baris perintah berguna lainnya juga

Mari kita menulis program CLI “Hello, $name” sederhana. Untuk mencobanya, buat file bernama ________36______3, seperti di bawah ini

" . PHP_EOL;
    exit(1);
}
$name = $argv[1];
echo "Hello, $name" . PHP_EOL;

PHP menyiapkan dua variabel khusus berdasarkan argumen yang digunakan skrip Anda.

" . PHP_EOL;
    exit(1);
}
$name = $argv[1];
echo "Hello, $name" . PHP_EOL;
4 adalah variabel integer yang berisi jumlah argumen dan
" . PHP_EOL;
    exit(1);
}
$name = $argv[1];
echo "Hello, $name" . PHP_EOL;
5 adalah variabel array yang berisi nilai setiap argumen. Argumen pertama selalu berupa nama file skrip PHP Anda, dalam hal ini
" . PHP_EOL;
    exit(1);
}
$name = $argv[1];
echo "Hello, $name" . PHP_EOL;
3

Ekspresi

" . PHP_EOL;
    exit(1);
}
$name = $argv[1];
echo "Hello, $name" . PHP_EOL;
_7 digunakan dengan angka bukan nol untuk memberi tahu shell bahwa perintah gagal. Kode keluar yang umum digunakan dapat ditemukan di sini

Untuk menjalankan skrip kami, di atas, dari baris perintah

brew unlink php
brew link --overwrite [email protected]
0

Xdebug

Salah satu alat paling berguna dalam pengembangan perangkat lunak adalah debugger yang tepat. Ini memungkinkan Anda melacak eksekusi kode Anda dan memantau konten tumpukan. Xdebug, debugger PHP, dapat digunakan oleh berbagai IDE untuk menyediakan Breakpoints dan pemeriksaan tumpukan. Itu juga dapat memungkinkan alat seperti PHPUnit dan KCacheGrind untuk melakukan analisis cakupan kode dan pembuatan profil kode

Jika Anda menemukan diri Anda terikat, bersedia menggunakan

" . PHP_EOL;
    exit(1);
}
$name = $argv[1];
echo "Hello, $name" . PHP_EOL;
8/
" . PHP_EOL;
    exit(1);
}
$name = $argv[1];
echo "Hello, $name" . PHP_EOL;
9, dan Anda masih tidak dapat menemukan solusinya - mungkin Anda perlu menggunakan debugger

Menginstal Xdebug bisa rumit, tetapi salah satu fitur terpentingnya adalah "Remote Debugging" - jika Anda mengembangkan kode secara lokal dan kemudian mengujinya di dalam VM atau di server lain, Remote Debugging adalah fitur yang ingin Anda aktifkan segera

Biasanya, Anda akan memodifikasi Apache VHost atau. htaccess dengan nilai-nilai ini

brew unlink php
brew link --overwrite [email protected]
1

"Host jarak jauh" dan "port jarak jauh" akan sesuai dengan komputer lokal Anda dan port tempat Anda mengonfigurasi IDE untuk didengarkan. Maka itu hanya masalah menempatkan IDE Anda ke mode "mendengarkan koneksi", dan memuat URL

brew unlink php
brew link --overwrite [email protected]
2

IDE Anda sekarang akan mencegat keadaan saat ini saat skrip dieksekusi, memungkinkan Anda untuk menyetel breakpoint dan menyelidiki nilai dalam memori

Debugger grafis membuatnya sangat mudah untuk menelusuri kode, memeriksa variabel, dan mengevaluasi kode terhadap runtime langsung. Banyak IDE memiliki dukungan bawaan atau berbasis plugin untuk debugging grafis dengan Xdebug. MacGDBp adalah GUI Xdebug gratis, bersumber terbuka, berdiri sendiri untuk Mac

Ada banyak pustaka, kerangka kerja, dan komponen PHP untuk dipilih. Proyek Anda kemungkinan akan menggunakan beberapa di antaranya — ini adalah dependensi proyek. Hingga saat ini, PHP tidak memiliki cara yang baik untuk mengelola dependensi proyek ini. Bahkan jika Anda mengelolanya secara manual, Anda tetap harus khawatir tentang pemuat otomatis. Itu bukan lagi masalah

Saat ini ada dua sistem manajemen paket utama untuk PHP - dan. Komposer saat ini adalah pengelola paket paling populer untuk PHP, namun untuk waktu yang lama PEAR adalah pengelola paket utama yang digunakan. Mengetahui sejarah PEAR adalah ide yang bagus, karena Anda masih dapat menemukan referensi bahkan jika Anda tidak pernah menggunakannya

Komposer dan Pemaket

Komposer adalah manajer ketergantungan yang direkomendasikan untuk PHP. Cantumkan dependensi proyek Anda dalam file

brew unlink php
brew link --overwrite [email protected]
00 dan, dengan beberapa perintah sederhana, Composer akan secara otomatis mengunduh dependensi proyek Anda dan menyiapkan pemuatan otomatis untuk Anda. Komposer analog dengan NPM di node. js, atau Bundler di dunia Ruby

Ada banyak library PHP yang kompatibel dengan Composer dan siap digunakan dalam proyek Anda. “Paket” ini terdaftar di Packagist, repositori resmi untuk pustaka PHP yang kompatibel dengan Komposer

Cara Memasang Komposer

Cara teraman untuk mengunduh komposer adalah dengan mengikuti petunjuk resmi. Ini akan memverifikasi penginstal tidak rusak atau dirusak. Pemasang menginstal biner

brew unlink php
brew link --overwrite [email protected]
_01 di direktori kerja Anda saat ini

Kami merekomendasikan menginstal Composer secara global (mis. g. satu salinan di

brew unlink php
brew link --overwrite [email protected]
_02). Untuk melakukannya, jalankan perintah ini selanjutnya

brew unlink php
brew link --overwrite [email protected]
_3

Catatan. Jika di atas gagal karena izin, awali dengan

brew unlink php
brew link --overwrite [email protected]
03

Untuk menjalankan Komposer yang diinstal secara lokal, Anda akan menggunakan

brew unlink php
brew link --overwrite [email protected]
04, secara global cukup
brew unlink php
brew link --overwrite [email protected]
05

Menginstal di Windows

Untuk pengguna Windows, cara termudah untuk memulai dan menjalankannya adalah dengan menggunakan penginstal ComposerSetup, yang menjalankan penginstalan global dan menyiapkan

brew unlink php
brew link --overwrite [email protected]
06 Anda sehingga Anda dapat memanggil
brew unlink php
brew link --overwrite [email protected]
05 dari direktori mana pun di baris perintah Anda

Cara Mendefinisikan dan Menginstal Ketergantungan

Komposer melacak dependensi proyek Anda dalam file bernama

brew unlink php
brew link --overwrite [email protected]
00. Anda dapat mengelolanya secara manual jika Anda mau, atau menggunakan Composer itu sendiri. Perintah
brew unlink php
brew link --overwrite [email protected]
_09 menambahkan ketergantungan proyek dan jika Anda tidak memiliki file
brew unlink php
brew link --overwrite [email protected]
00, satu akan dibuat. Berikut adalah contoh yang menambahkan Twig sebagai ketergantungan proyek Anda

brew unlink php
brew link --overwrite [email protected]
_4

Atau, perintah

brew unlink php
brew link --overwrite [email protected]
_11 akan memandu Anda melalui pembuatan file
brew unlink php
brew link --overwrite [email protected]
00 lengkap untuk proyek Anda. Either way, setelah Anda membuat file
brew unlink php
brew link --overwrite [email protected]
00 Anda, Anda dapat memberi tahu Composer untuk mengunduh dan menginstal dependensi Anda ke dalam direktori
> php -i
1. Ini juga berlaku untuk proyek yang telah Anda unduh yang telah menyediakan file
brew unlink php
brew link --overwrite [email protected]
00

brew unlink php
brew link --overwrite [email protected]
5

Selanjutnya, tambahkan baris ini ke file PHP utama aplikasi Anda;

brew unlink php
brew link --overwrite [email protected]
6
brew unlink php
brew link --overwrite [email protected]
16 yang menyimpan versi persis dari setiap paket yang diunduh saat Anda pertama kali menjalankan
brew unlink php
brew link --overwrite [email protected]
17. Jika Anda berbagi proyek dengan orang lain, pastikan file
brew unlink php
brew link --overwrite [email protected]
_18 disertakan, sehingga ketika mereka menjalankan
brew unlink php
brew link --overwrite [email protected]
17 mereka akan mendapatkan versi yang sama dengan Anda. Untuk memperbarui dependensi Anda, jalankan
brew unlink php
brew link --overwrite [email protected]
_20. Jangan gunakan
brew unlink php
brew link --overwrite [email protected]
20 saat menerapkan, hanya
brew unlink php
brew link --overwrite [email protected]
17, jika tidak, Anda mungkin akan mendapatkan versi paket yang berbeda pada produksi

Ini sangat berguna saat Anda menentukan persyaratan versi secara fleksibel. Misalnya, persyaratan versi

brew unlink php
brew link --overwrite [email protected]
_23 berarti "apa pun yang lebih baru dari
brew unlink php
brew link --overwrite [email protected]
24, tetapi kurang dari
brew unlink php
brew link --overwrite [email protected]
25". Anda juga dapat menggunakan wildcard
brew unlink php
brew link --overwrite [email protected]
_26 seperti pada
brew unlink php
brew link --overwrite [email protected]
27. Sekarang perintah
brew unlink php
brew link --overwrite [email protected]
_20 Composer akan memutakhirkan semua dependensi Anda ke versi terbaru yang sesuai dengan batasan yang Anda tetapkan

Untuk menerima pemberitahuan tentang rilis versi baru, Anda dapat mendaftar ke perpustakaan. io, layanan web yang dapat memantau dependensi dan mengirimi Anda peringatan tentang pembaruan

Memeriksa dependensi Anda untuk masalah keamanan

Pemeriksa Keamanan PHP Lokal adalah alat baris perintah, yang akan memeriksa file ________2______18 Anda dan memberi tahu Anda jika Anda perlu memperbarui salah satu dependensi Anda

Menangani dependensi global dengan Composer

Komposer juga dapat menangani dependensi global dan binernya. Penggunaannya mudah, yang perlu Anda lakukan hanyalah mengawali perintah Anda dengan

brew unlink php
brew link --overwrite [email protected]
30. Jika misalnya Anda ingin menginstal PHPUnit dan membuatnya tersedia secara global, Anda akan menjalankan perintah berikut

brew unlink php
brew link --overwrite [email protected]
7

Ini akan membuat folder

brew unlink php
brew link --overwrite [email protected]
_31 tempat dependensi global Anda berada. Agar binari paket terinstal tersedia di mana-mana, Anda kemudian akan menambahkan folder
brew unlink php
brew link --overwrite [email protected]
32 ke variabel
brew unlink php
brew link --overwrite [email protected]
06 Anda

brew unlink php
brew link --overwrite [email protected]
34 installer dan menjalankannya. Dokumentasi PEAR memiliki petunjuk penginstalan terperinci untuk setiap sistem operasi

Jika Anda menggunakan Linux, Anda juga dapat melihat manajer paket distribusi Anda. Debian dan Ubuntu, misalnya, memiliki paket ________2______35 yang tepat

Cara menginstal paket

Jika paket terdaftar di daftar paket PEAR, Anda dapat menginstalnya dengan menentukan nama resminya

brew unlink php
brew link --overwrite [email protected]
_8

Jika paket dihosting di saluran lain, Anda harus

brew unlink php
brew link --overwrite [email protected]
36 saluran terlebih dahulu dan juga menentukannya saat memasang. Lihat Menggunakan dokumen saluran untuk informasi selengkapnya tentang topik ini

Menangani dependensi PEAR dengan Composer

Jika Anda sudah menggunakan dan ingin menginstal beberapa kode PEAR juga, Anda dapat menggunakan Composer untuk menangani dependensi PEAR Anda. Repositori PEAR tidak lagi didukung secara langsung oleh Composer versi 2, jadi Anda harus menambahkan repositori secara manual untuk menginstal paket PEAR

brew unlink php
brew link --overwrite [email protected]
_9

Bagian pertama

brew unlink php
brew link --overwrite [email protected]
37 akan digunakan untuk memberi tahu Komposer bahwa ia harus "menginisialisasi" (atau "menemukan" dalam terminologi PEAR) repo pear. Kemudian bagian
brew unlink php
brew link --overwrite [email protected]
_38 akan mengawali nama paket seperti ini

pear-channel/paket

Awalan "pear" di-hardcode untuk menghindari konflik, karena saluran pir bisa sama dengan nama vendor paket lain misalnya, maka nama pendek saluran (atau URL lengkap) dapat digunakan untuk referensi di saluran mana paket itu berada

Saat kode ini diinstal, kode ini akan tersedia di direktori vendor Anda dan secara otomatis tersedia melalui autoloader Composer

vendor/pear2/pear2-http-request/pear2/HTTP/Request. php

Untuk menggunakan paket PEAR ini, cukup referensikan seperti itu

brew unlink php
brew link --overwrite [email protected]
6
brew unlink php
brew link --overwrite [email protected]
39 metode pabrik atau lakukan
brew unlink php
brew link --overwrite [email protected]
40 untuk mendapatkan tanggal dan waktu saat ini. Gunakan metode
brew unlink php
brew link --overwrite [email protected]
_41 untuk mengonversi DateTime kembali ke string untuk output

brew unlink php
brew link --overwrite [email protected]
1

Menghitung dengan DateTime dimungkinkan dengan kelas DateInterval. DateTime memiliki metode seperti

brew unlink php
brew link --overwrite [email protected]
42 dan
brew unlink php
brew link --overwrite [email protected]
43 yang menggunakan DateInterval sebagai argumen. Jangan menulis kode yang mengharapkan jumlah detik yang sama setiap hari. Pergeseran siang hari dan perubahan zona waktu akan mematahkan asumsi tersebut. Gunakan interval tanggal sebagai gantinya. Untuk menghitung perbedaan tanggal gunakan metode
brew unlink php
brew link --overwrite [email protected]
_44. Ini akan mengembalikan DateInterval baru, yang sangat mudah ditampilkan

brew unlink php
brew link --overwrite [email protected]
2

Anda dapat menggunakan perbandingan standar pada objek DateTime

brew unlink php
brew link --overwrite [email protected]
6
brew unlink php
brew link --overwrite [email protected]
45
brew unlink php
brew link --overwrite [email protected]
46 dan
brew unlink php
brew link --overwrite [email protected]
47, perlu pertimbangan khusus. Fungsi-fungsi ini sering kali memiliki pasangan
brew unlink php
brew link --overwrite [email protected]
_48. misalnya,
brew unlink php
brew link --overwrite [email protected]
49 dan
brew unlink php
brew link --overwrite [email protected]
50. String
brew unlink php
brew link --overwrite [email protected]
_48 ini tersedia untuk Anda melalui Multibyte String Extension, dan dirancang khusus untuk beroperasi pada string Unicode

Anda harus menggunakan fungsi

brew unlink php
brew link --overwrite [email protected]
_48 setiap kali Anda mengoperasikan string Unicode. Misalnya, jika Anda menggunakan
brew unlink php
brew link --overwrite [email protected]
_53 pada string UTF-8, ada kemungkinan hasilnya akan menyertakan beberapa karakter setengah kacau. Fungsi yang benar untuk digunakan adalah mitra multibyte,
brew unlink php
brew link --overwrite [email protected]
54

Bagian yang sulit adalah mengingat untuk menggunakan fungsi

brew unlink php
brew link --overwrite [email protected]
48 setiap saat. Jika Anda lupa sekali saja, string Unicode Anda memiliki peluang untuk dikacaukan selama pemrosesan lebih lanjut

Tidak semua fungsi string memiliki pasangan

brew unlink php
brew link --overwrite [email protected]
48. Jika tidak ada satu untuk apa yang ingin Anda lakukan, maka Anda mungkin kurang beruntung

Anda harus menggunakan fungsi

brew unlink php
brew link --overwrite [email protected]
_57 di bagian atas setiap skrip PHP yang Anda tulis (atau di bagian atas skrip penyertaan global Anda), dan fungsi
brew unlink php
brew link --overwrite [email protected]
58 tepat setelahnya jika skrip Anda dikeluarkan ke browser. Secara eksplisit mendefinisikan pengkodean string Anda di setiap skrip akan menghemat banyak sakit kepala di jalan

Selain itu, banyak fungsi PHP yang beroperasi pada string memiliki parameter opsional yang memungkinkan Anda menentukan pengkodean karakter. Anda harus selalu secara eksplisit menunjukkan UTF-8 saat diberi opsi. Misalnya,

brew unlink php
brew link --overwrite [email protected]
_59 memiliki opsi untuk pengkodean karakter, dan Anda harus selalu menentukan UTF-8 jika berurusan dengan string tersebut. Perhatikan bahwa pada PHP 5. 4. 0, UTF-8 adalah penyandian default untuk
brew unlink php
brew link --overwrite [email protected]
59 dan
brew unlink php
brew link --overwrite [email protected]
61

Terakhir, Jika Anda membuat aplikasi terdistribusi dan tidak dapat memastikan bahwa ekstensi

brew unlink php
brew link --overwrite [email protected]
62 akan diaktifkan, maka pertimbangkan untuk menggunakan paket Composer symfony/polyfill-mbstring. Ini akan menggunakan
brew unlink php
brew link --overwrite [email protected]
62 jika tersedia, dan kembali ke fungsi non UTF-8 jika tidak

UTF-8 di tingkat Database

Jika skrip PHP Anda mengakses MySQL, ada kemungkinan string Anda dapat disimpan sebagai string non-UTF-8 di database meskipun Anda mengikuti semua tindakan pencegahan di atas

Untuk memastikan string Anda beralih dari PHP ke MySQL sebagai UTF-8, pastikan database dan tabel Anda semuanya diatur ke kumpulan karakter dan susunan

brew unlink php
brew link --overwrite [email protected]
64, dan bahwa Anda menggunakan kumpulan karakter
brew unlink php
brew link --overwrite [email protected]
64 dalam string koneksi PDO. Lihat contoh kode di bawah ini. Ini sangat penting

Perhatikan bahwa Anda harus menggunakan rangkaian karakter

brew unlink php
brew link --overwrite [email protected]
_64 untuk dukungan UTF-8 lengkap, bukan rangkaian karakter
brew unlink php
brew link --overwrite [email protected]
67. Lihat Bacaan Lebih Lanjut untuk mengetahui alasannya

UTF-8 di tingkat browser

Gunakan fungsi

brew unlink php
brew link --overwrite [email protected]
_58 untuk memastikan bahwa skrip PHP Anda menghasilkan string UTF-8 ke browser Anda

Browser kemudian perlu diberi tahu oleh respons HTTP bahwa halaman ini harus dianggap sebagai UTF-8. Hari ini, adalah umum untuk menyetel set karakter di header respons HTTP seperti ini

brew unlink php
brew link --overwrite [email protected]
6
brew unlink php
brew link --overwrite [email protected]
69 tag di tag halaman Anda

brew unlink php
brew link --overwrite [email protected]
6

Bacaan lebih lanjut

brew unlink php
brew link --overwrite [email protected]
70. Tanggal kembali ke tahun 1995 dan masih merupakan implementasi lengkap untuk menerjemahkan perangkat lunak. Cukup mudah untuk berlari, sambil tetap menggunakan alat pendukung yang kuat. Ini tentang Gettext yang akan kita bicarakan di sini. Selain itu, untuk membantu Anda agar tidak berantakan pada baris perintah, kami akan menyajikan aplikasi GUI hebat yang dapat digunakan untuk memperbarui sumber l10n Anda dengan mudah

Ada perpustakaan umum yang digunakan yang mendukung Gettext dan implementasi i18n lainnya. Beberapa dari mereka mungkin tampak lebih mudah untuk diinstal atau menggunakan fitur tambahan atau format file i18n. Dalam dokumen ini, kami berfokus pada alat yang disediakan dengan inti PHP, tetapi di sini kami mencantumkan yang lain untuk dilengkapi

  • aura/intl. Menyediakan alat internasionalisasi (I18N), khususnya terjemahan pesan per-lokal berorientasi paket. Ini menggunakan format array untuk pesan. Tidak menyediakan ekstraktor pesan, tetapi menyediakan pemformatan pesan lanjutan melalui ekstensi
    brew unlink php
    brew link --overwrite [email protected]
    
    71 (termasuk pesan jamak)
  • php-gettext/Gettext. Dapatkan dukungan teks dengan antarmuka OO; . Dapat berguna jika Anda perlu mengintegrasikan file terjemahan Anda ke bagian lain dari sistem, seperti antarmuka JavaScript
  • simfoni/terjemahan. mendukung banyak format berbeda, tetapi merekomendasikan penggunaan XLIFF verbose. Tidak menyertakan fungsi pembantu atau ekstraktor bawaan, tetapi mendukung placeholder menggunakan
    brew unlink php
    brew link --overwrite [email protected]
    
    74 secara internal
  • laminas/lamina-i18n. mendukung file array dan INI, atau format Gettext. Menerapkan lapisan caching untuk menyelamatkan Anda dari membaca sistem file setiap saat. Ini juga termasuk view helper, dan filter input dan validator yang sadar-lokal. Namun, itu tidak memiliki ekstraktor pesan

Kerangka kerja lain juga menyertakan modul i18n, tetapi tidak tersedia di luar basis kodenya

  • Laravel mendukung file array dasar, tidak memiliki ekstraktor otomatis tetapi menyertakan pembantu
    brew unlink php
    brew link --overwrite [email protected]
    
    75 untuk file template
  • Yii mendukung terjemahan berbasis array, Gettext, dan basis data, dan menyertakan ekstraktor pesan. Itu didukung oleh ekstensi
    brew unlink php
    brew link --overwrite [email protected]
    
    _76, tersedia sejak PHP 5. 3, dan berdasarkan proyek ICU;

Jika Anda memutuskan untuk menggunakan salah satu perpustakaan yang tidak menyediakan ekstraktor, Anda mungkin ingin menggunakan format gettext, sehingga Anda dapat menggunakan toolchain gettext asli (termasuk Poedit) seperti yang dijelaskan di sisa bab ini.

Dapatkan teks

Instalasi

Anda mungkin perlu menginstal Gettext dan library PHP terkait dengan menggunakan manajer paket Anda, seperti

brew unlink php
brew link --overwrite [email protected]
77 atau
brew unlink php
brew link --overwrite [email protected]
78. Setelah diinstal, aktifkan dengan menambahkan
brew unlink php
brew link --overwrite [email protected]
_79 (Linux/Unix) atau
brew unlink php
brew link --overwrite [email protected]
80 (Windows) ke
brew unlink php
brew link --overwrite [email protected]
81 Anda

Di sini kita juga akan menggunakan Poedit untuk membuat file terjemahan. Anda mungkin akan menemukannya di manajer paket sistem Anda;

Struktur

Jenis file

Ada tiga file yang biasanya Anda tangani saat bekerja dengan gettext. Yang utama adalah file PO (Portable Object) dan MO (Machine Object), yang pertama adalah daftar "objek yang diterjemahkan" yang dapat dibaca dan yang kedua, biner yang sesuai untuk ditafsirkan oleh gettext saat melakukan lokalisasi. Ada juga file POT (Templat), yang berisi semua kunci yang ada dari file sumber Anda, dan dapat digunakan sebagai panduan untuk membuat dan memperbarui semua file PO. File template tersebut tidak wajib. tergantung pada alat yang Anda gunakan untuk melakukan l10n, Anda dapat melakukannya dengan baik hanya dengan file PO/MO. Anda akan selalu memiliki sepasang file PO/MO per bahasa dan wilayah, tetapi hanya satu POT per domain

Domain

Ada beberapa kasus, dalam proyek besar, di mana Anda mungkin perlu memisahkan terjemahan ketika kata-kata yang sama menyampaikan arti yang berbeda dengan konteks tertentu. Dalam kasus tersebut, Anda membaginya menjadi domain yang berbeda. Mereka, pada dasarnya, bernama grup file POT/PO/MO, di mana nama file adalah domain terjemahan tersebut. Proyek kecil dan menengah biasanya, untuk kesederhanaan, hanya menggunakan satu domain; . Dalam proyek Symfony, misalnya, domain digunakan untuk memisahkan terjemahan untuk pesan validasi

Kode lokal

Lokal hanyalah kode yang mengidentifikasi satu versi bahasa. Ini ditentukan mengikuti spesifikasi ISO 639-1 dan ISO 3166-1 alpha-2. dua huruf kecil untuk bahasa, secara opsional diikuti dengan garis bawah dan dua huruf besar yang menunjukkan kode negara atau wilayah. Untuk , tiga huruf digunakan

Untuk beberapa pembicara, bagian negara mungkin terlihat berlebihan. Faktanya, beberapa bahasa memiliki dialek di berbagai negara, seperti Jerman Austria (

brew unlink php
brew link --overwrite [email protected]
82) atau Portugis Brasil (
brew unlink php
brew link --overwrite [email protected]
83). Bagian kedua digunakan untuk membedakan antara dialek-dialek tersebut - jika tidak ada, itu dianggap sebagai versi bahasa "generik" atau "hibrid".

Struktur direktori

Untuk menggunakan Gettext, kita harus mematuhi struktur folder tertentu. Pertama, Anda harus memilih root arbitrer untuk file l10n Anda di repositori sumber Anda. Di dalamnya, Anda akan memiliki folder untuk setiap lokal yang diperlukan, dan folder ________2______84 tetap yang akan berisi semua pasangan PO/MO Anda. Contoh

brew unlink php
brew link --overwrite [email protected]
_7

Bentuk jamak

Seperti yang kami katakan di pendahuluan, bahasa yang berbeda mungkin menggunakan aturan jamak yang berbeda. Namun, gettext sekali lagi menyelamatkan kita dari masalah ini. Saat membuat file

brew unlink php
brew link --overwrite [email protected]
85 baru, Anda harus mendeklarasikan aturan jamak untuk bahasa tersebut, dan potongan terjemahan yang sensitif jamak akan memiliki bentuk yang berbeda untuk setiap aturan tersebut. Saat memanggil Gettext dalam kode, Anda harus menentukan nomor yang terkait dengan kalimat, dan itu akan menghasilkan bentuk yang benar untuk digunakan - bahkan menggunakan substitusi string jika diperlukan

Aturan jamak mencakup jumlah bentuk jamak yang tersedia dan tes boolean dengan

brew unlink php
brew link --overwrite [email protected]
86 yang akan menentukan di aturan mana angka yang diberikan jatuh (memulai hitungan dengan 0). Sebagai contoh

  • Jepang.
    brew unlink php
    brew link --overwrite [email protected]
    
    87 - hanya satu aturan
  • Bahasa inggris.
    brew unlink php
    brew link --overwrite [email protected]
    
    88 - dua aturan, pertama jika N adalah satu, aturan kedua sebaliknya
  • Bahasa portugis brazil.
    brew unlink php
    brew link --overwrite [email protected]
    
    89 - dua aturan, kedua jika N lebih besar dari satu, pertama sebaliknya

Sekarang setelah Anda memahami dasar cara kerja aturan jamak - dan jika tidak, harap lihat penjelasan lebih dalam tentang -, Anda mungkin ingin menyalin yang Anda perlukan dari daftar alih-alih menulisnya dengan tangan

Saat memanggil Gettext untuk melakukan pelokalan pada kalimat dengan penghitung, Anda juga harus memberikannya nomor terkait. Gettext akan menentukan aturan apa yang harus berlaku dan menggunakan versi lokal yang benar. Anda harus memasukkan dalam file

brew unlink php
brew link --overwrite [email protected]
_85 kalimat yang berbeda untuk setiap aturan jamak yang ditentukan

Implementasi sampel

Setelah semua teori itu, mari kita sedikit praktis. Berikut adalah kutipan dari file

brew unlink php
brew link --overwrite [email protected]
85 - jangan pedulikan dengan formatnya, tetapi dengan konten keseluruhan sebagai gantinya;

brew unlink php
brew link --overwrite [email protected]
8

Bagian pertama berfungsi seperti header, memiliki

brew unlink php
brew link --overwrite [email protected]
92 dan
brew unlink php
brew link --overwrite [email protected]
93 terutama kosong. Ini menjelaskan pengkodean file, bentuk jamak dan hal-hal lain yang kurang relevan. Bagian kedua menerjemahkan string sederhana dari bahasa Inggris ke Portugis Brasil, dan bagian ketiga melakukan hal yang sama, tetapi memanfaatkan penggantian string dari
brew unlink php
brew link --overwrite [email protected]
94 sehingga terjemahan dapat berisi nama pengguna dan tanggal kunjungan. Bagian terakhir adalah contoh bentuk pluralisasi, menampilkan versi tunggal dan jamak sebagai
brew unlink php
brew link --overwrite [email protected]
92 dalam bahasa Inggris dan terjemahannya sebagai
brew unlink php
brew link --overwrite [email protected]
93 0 dan 1 (mengikuti nomor yang diberikan oleh aturan jamak). Di sana, penggantian string juga digunakan sehingga jumlahnya dapat dilihat langsung dalam kalimat, dengan menggunakan
brew unlink php
brew link --overwrite [email protected]
97. Bentuk jamak selalu memiliki dua
brew unlink php
brew link --overwrite [email protected]
_92 (tunggal dan jamak), sehingga disarankan untuk tidak menggunakan bahasa yang rumit sebagai sumber terjemahan

Diskusi tentang kunci l10n

Seperti yang mungkin Anda perhatikan, kami menggunakan sebagai ID sumber kalimat yang sebenarnya dalam bahasa Inggris.

brew unlink php
brew link --overwrite [email protected]
_92 itu sama digunakan di seluruh
brew unlink php
brew link --overwrite [email protected]
85 file Anda, artinya bahasa lain akan memiliki format yang sama dan bidang
brew unlink php
brew link --overwrite [email protected]
92 yang sama tetapi diterjemahkan
brew unlink php
brew link --overwrite [email protected]
93 baris

Berbicara tentang kunci terjemahan, ada dua “aliran” utama di sini

  1. brew unlink php
    brew link --overwrite [email protected]
    
    92 sebagai kalimat nyata. Keuntungan utamanya adalah
    • jika ada bagian dari perangkat lunak yang tidak diterjemahkan dalam bahasa tertentu, kunci yang ditampilkan akan tetap memiliki beberapa arti. Contoh. jika Anda kebetulan menerjemahkan dengan hati dari bahasa Inggris ke bahasa Spanyol tetapi butuh bantuan untuk menerjemahkan ke bahasa Prancis, Anda dapat menerbitkan halaman baru dengan kalimat bahasa Prancis yang hilang, dan bagian dari situs web akan ditampilkan dalam bahasa Inggris sebagai gantinya;
    • jauh lebih mudah bagi penerjemah untuk memahami apa yang terjadi dan melakukan terjemahan yang tepat berdasarkan
      brew unlink php
      brew link --overwrite [email protected]
      
      92;
    • itu memberi Anda l10n "gratis" untuk satu bahasa - sumber satu;
    • Satu-satunya kelemahan. jika Anda perlu mengubah teks yang sebenarnya, Anda perlu mengganti
      brew unlink php
      brew link --overwrite [email protected]
      
      92 yang sama di beberapa file bahasa
  2. brew unlink php
    brew link --overwrite [email protected]
    
    92 sebagai kunci yang unik dan terstruktur. Itu akan menggambarkan peran kalimat dalam aplikasi dengan cara terstruktur, termasuk template atau bagian di mana string berada, bukan kontennya
    • itu adalah cara yang bagus untuk mengatur kode, memisahkan konten teks dari logika template
    • namun, hal itu dapat menimbulkan masalah bagi penerjemah yang kehilangan konteksnya. File bahasa sumber akan dibutuhkan sebagai dasar untuk terjemahan lainnya. Contoh. pengembang idealnya memiliki file
      brew unlink php
      brew link --overwrite [email protected]
      
      _07, yang akan dibaca oleh penerjemah untuk memahami apa yang harus ditulis di
      brew unlink php
      brew link --overwrite [email protected]
      
      08 misalnya
    • terjemahan yang hilang akan menampilkan tombol yang tidak berarti di layar (
      brew unlink php
      brew link --overwrite [email protected]
      
      09 bukannya
      brew unlink php
      brew link --overwrite [email protected]
      
      10 pada halaman bahasa Prancis yang tidak diterjemahkan tersebut). Itu bagus karena akan memaksa terjemahan selesai sebelum diterbitkan - namun, buruk karena masalah terjemahan akan sangat buruk di antarmuka. Namun, beberapa perpustakaan menyertakan opsi untuk menentukan bahasa yang diberikan sebagai "fallback", yang memiliki perilaku yang mirip dengan pendekatan lainnya

Manual Gettext lebih menyukai pendekatan pertama karena, secara umum, lebih mudah bagi penerjemah dan pengguna jika ada masalah. Begitulah cara kami akan bekerja di sini juga. Namun, lebih menyukai terjemahan berbasis kata kunci, untuk memungkinkan perubahan independen dari semua terjemahan tanpa mempengaruhi template juga

Penggunaan sehari-hari

Dalam aplikasi tipikal, Anda akan menggunakan beberapa fungsi Gettext saat menulis teks statis di halaman Anda. Kalimat-kalimat itu kemudian akan muncul dalam

brew unlink php
brew link --overwrite [email protected]
_85 file, diterjemahkan, dikompilasi menjadi
brew unlink php
brew link --overwrite [email protected]
12 file dan kemudian, digunakan oleh Gettext saat merender antarmuka yang sebenarnya. Mengingat itu, mari kita satukan apa yang telah kita diskusikan sejauh ini dalam contoh langkah demi langkah

1. Contoh file template, termasuk beberapa panggilan gettext yang berbeda

brew unlink php
brew link --overwrite [email protected]
_9
  • brew unlink php
    brew link --overwrite [email protected]
    
    13 hanya menerjemahkan
    brew unlink php
    brew link --overwrite [email protected]
    
    92 menjadi
    brew unlink php
    brew link --overwrite [email protected]
    
    93 yang sesuai untuk bahasa tertentu. Ada juga fungsi singkatan
    brew unlink php
    brew link --overwrite [email protected]
    
    16 yang bekerja dengan cara yang sama;
  • brew unlink php
    brew link --overwrite [email protected]
    
    17 melakukan hal yang sama tetapi dengan aturan jamak;
  • Ada juga
    brew unlink php
    brew link --overwrite [email protected]
    
    18 dan
    brew unlink php
    brew link --overwrite [email protected]
    
    19, yang memungkinkan Anda mengganti domain untuk satu panggilan. Lebih lanjut tentang konfigurasi domain pada contoh berikutnya

2. Contoh file penyiapan (
brew unlink php
brew link --overwrite [email protected]
20 seperti yang digunakan di atas), memilih lokal yang benar dan mengonfigurasi Gettext

sudo port install php74
sudo port install php82
_0

3. Mempersiapkan terjemahan untuk proses pertama

Salah satu keuntungan besar yang dimiliki Gettext dibandingkan paket kerangka i18n khusus adalah format file yang luas dan kuat. “Ya ampun, itu cukup sulit untuk dipahami dan diedit dengan tangan, susunan sederhana akan lebih mudah. ” Make no mistake, applications like Poedit are here to help - a lot. Anda bisa mendapatkan program dari situs web mereka, gratis dan tersedia untuk semua platform. Ini adalah alat yang cukup mudah untuk digunakan, dan alat yang sangat kuat pada saat yang sama - menggunakan semua fitur yang tersedia Gettext. This guide is based on PoEdit 1. 8

In the first run, you should select “File > New…” from the menu. You’ll be asked straight ahead for the language. di sini Anda dapat memilih/memfilter bahasa yang ingin Anda terjemahkan, atau menggunakan format yang kami sebutkan sebelumnya, seperti

brew unlink php
brew link --overwrite [email protected]
21 atau
brew unlink php
brew link --overwrite [email protected]
83

Now, save the file - using that directory structure we mentioned as well. Then you should click “Extract from sources”, and here you’ll configure various settings for the extraction and translation tasks. You’ll be able to find all those later through “Catalog > Properties”

  • Source paths. here you must include all folders from the project where
    brew unlink php
    brew link --overwrite [email protected]
    
    13 (and siblings) are called - this is usually your templates/views folder(s). This is the only mandatory setting;
  • Translation properties
    • Project name and version, Team and Team’s email address. useful information that goes in the . po file header;
    • Plural forms. here go those rules we mentioned before - there’s a link in there with samples as well. You can leave it with the default option most of the time, as PoEdit already includes a handy database of plural rules for many languages
    • Charsets. UTF-8, preferably;
    • Source code charset. set here the charset used by your codebase - probably UTF-8 as well, right?
  • Source keywords. The underlying software knows how
    brew unlink php
    brew link --overwrite [email protected]
    
    13 and similar function calls look like in several programming languages, but you might as well create your own translation functions. It will be here you’ll add those other methods. This will be discussed later in the “Tips” section

After setting those points it will run a scan through your source files to find all the localization calls. After every scan PoEdit will display a summary of what was found and what was removed from the source files. New entries will fed empty into the translation table, and you’ll start typing in the localized versions of those strings. Save it and a . mo file will be (re)compiled into the same folder and ta-dah. your project is internationalized

4. Translating strings

As you may have noticed before, there are two main types of localized strings. simple ones and those with plural forms. The first ones have simply two boxes. source and localized string. The source string cannot be modified as Gettext/Poedit do not include the powers to alter your source files - you should change the source itself and rescan the files. Tip. you may right-click a translation line and it will hint you with the source files and lines where that string is being used. On the other hand, plural form strings include two boxes to show the two source strings, and tabs so you can configure the different final forms

Whenever you change your sources and need to update the translations, just hit Refresh and Poedit will rescan the code, removing non-existent entries, merging the ones that changed and adding new ones. It may also try to guess some translations, based on other ones you did. Those guesses and the changed entries will receive a “Fuzzy” marker, indicating it needs review, appearing golden in the list. It is also useful if you have a translation team and someone tries to write something they are not sure about. just mark Fuzzy, and someone else will review later

Finally, it is advised to leave “View > Untranslated entries first” marked, as it will help you a lot to not forget any entry. From that menu, you can also open parts of the UI that allow you to leave contextual information for translators if needed

Tips & Tricks

Possible caching issues

If you are running PHP as a module on Apache (

brew unlink php
brew link --overwrite [email protected]
25), you might face issues with the
brew unlink php
brew link --overwrite [email protected]
12 file being cached. It happens the first time it is read, and then, to update it, you might need to restart the server. On Nginx and PHP5 it usually takes only a couple of page refreshes to refresh the translation cache, and on PHP7 it is rarely needed

Additional helper functions

As preferred by many people, it is easier to use

brew unlink php
brew link --overwrite [email protected]
16 instead of
brew unlink php
brew link --overwrite [email protected]
13. Many custom i18n libraries from frameworks use something similar to
brew unlink php
brew link --overwrite [email protected]
29 as well, to make translated code shorter. However, that is the only function that sports a shortcut. You might want to add in your project some others, such as
brew unlink php
brew link --overwrite [email protected]
30 or
brew unlink php
brew link --overwrite [email protected]
31 for
brew unlink php
brew link --overwrite [email protected]
17, or maybe a fancy
brew unlink php
brew link --overwrite [email protected]
33 that would join
brew unlink php
brew link --overwrite [email protected]
13 and
brew unlink php
brew link --overwrite [email protected]
35 calls. Other libraries, such as php-gettext’s Gettext also provide helper functions like these

In those cases, you’ll need to instruct the Gettext utility on how to extract the strings from those new functions. Don’t be afraid; it is very easy. It is just a field in the

brew unlink php
brew link --overwrite [email protected]
85 file, or a Settings screen on Poedit. In the editor, that option is inside “Catalog > Properties > Source keywords”. Remember. Gettext already knows the default functions for many languages, so don’t be afraid if that list seems empty. You need to include there the specifications of those new functions, following

  • if you create something like
    brew unlink php
    brew link --overwrite [email protected]
    
    29 that simply returns the translation for a string, you can specify it as
    brew unlink php
    brew link --overwrite [email protected]
    
    38. Gettext will know the only function argument is the string to be translated;
  • if the function has more than one argument, you can specify in which one the first string is - and if needed, the plural form as well. For instance, if we call our function like this.
    brew unlink php
    brew link --overwrite [email protected]
    
    39, the specification would be
    brew unlink php
    brew link --overwrite [email protected]
    
    40, meaning the first form is the first argument, and the second form is the second argument. If your number comes as the first argument instead, the spec would be
    brew unlink php
    brew link --overwrite [email protected]
    
    41, indicating the first form is the second argument, and so on

After including those new rules in the

brew unlink php
brew link --overwrite [email protected]
85 file, a new scan will bring in your new strings just as easy as before

References

From Wikipedia

Dependency injection is a software design pattern that allows the removal of hard-coded dependencies and makes it possible to change them, whether at run-time or compile-time

This quote makes the concept sound much more complicated than it actually is. Dependency Injection is providing a component with its dependencies either through constructor injection, method calls or the setting of properties. It is that simple

Konsep dasar

We can demonstrate the concept with a simple, yet naive example

Here we have a

brew unlink php
brew link --overwrite [email protected]
43 class that requires an adapter to speak to the database. We instantiate the adapter in the constructor and create a hard dependency. This makes testing difficult and means the
brew unlink php
brew link --overwrite [email protected]
43 class is very tightly coupled to the adapter

sudo port install php74
sudo port install php82
1

This code can be refactored to use Dependency Injection and therefore loosen the dependency

sudo port install php74
sudo port install php82
2

Now we are giving the

brew unlink php
brew link --overwrite [email protected]
43 class its dependency rather than creating it itself. We could even create a method that would accept an argument of the dependency and set it that way, or if the
brew unlink php
brew link --overwrite [email protected]
46 property was
brew unlink php
brew link --overwrite [email protected]
47 we could set it directly

Complex Problem

If you have ever read about Dependency Injection then you have probably seen the terms “Inversion of Control” or “Dependency Inversion Principle”. These are the complex problems that Dependency Injection solves

Inversion of Control

Inversion of Control is as it says, “inverting the control” of a system by keeping organizational control entirely separate from our objects. In terms of Dependency Injection, this means loosening our dependencies by controlling and instantiating them elsewhere in the system

For years, PHP frameworks have been achieving Inversion of Control, however, the question became, which part of control are we inverting, and where to? For example, MVC frameworks would generally provide a super object or base controller that other controllers must extend to gain access to its dependencies. This is Inversion of Control, however, instead of loosening dependencies, this method simply moved them

Dependency Injection allows us to more elegantly solve this problem by only injecting the dependencies we need, when we need them, without the need for any hard coded dependencies at all

S. O. L. I. D

Single Responsibility Principle

The Single Responsibility Principle is about actors and high-level architecture. It states that “A class should have only one reason to change. ” This means that every class should only have responsibility over a single part of the functionality provided by the software. The largest benefit of this approach is that it enables improved code reusability. By designing our class to do just one thing, we can use (or re-use) it in any other program without changing it

Open/Closed Principle

The Open/Closed Principle is about class design and feature extensions. It states that “Software entities (classes, modules, functions, etc. ) should be open for extension, but closed for modification. ” This means that we should design our modules, classes and functions in a way that when a new functionality is needed, we should not modify our existing code but rather write new code that will be used by existing code. Practically speaking, this means that we should write classes that implement and adhere to interfaces, then type-hint against those interfaces instead of specific classes

The largest benefit of this approach is that we can very easily extend our code with support for something new without having to modify existing code, meaning that we can reduce QA time, and the risk for negative impact to the application is substantially reduced. We can deploy new code, faster, and with more confidence

Liskov Substitution Principle

The Liskov Substitution Principle is about subtyping and inheritance. It states that “Child classes should never break the parent class’ type definitions. ” Or, in Robert C. Martin’s words, “Subtypes must be substitutable for their base types. ”

For example, if we have a

brew unlink php
brew link --overwrite [email protected]
48 interface which defines an
brew unlink php
brew link --overwrite [email protected]
49 method, and we have
brew unlink php
brew link --overwrite [email protected]
50 and
brew unlink php
brew link --overwrite [email protected]
51 classes which both implement the
brew unlink php
brew link --overwrite [email protected]
48 interface, then we can expect that the usage of the
brew unlink php
brew link --overwrite [email protected]
49 method will always do the thing that we intend. If we later create a
brew unlink php
brew link --overwrite [email protected]
54 class or a
brew unlink php
brew link --overwrite [email protected]
55 class which implement the
brew unlink php
brew link --overwrite [email protected]
48 interface, we will already know and understand what the
brew unlink php
brew link --overwrite [email protected]
49 method will do. The largest benefit of this approach is that we have the ability to build flexible and easily-configurable programs, because when we change one object of a type (e. g. ,
brew unlink php
brew link --overwrite [email protected]
48) ke yang lain, kami tidak perlu mengubah apa pun dalam program kami

Prinsip Segregasi Antarmuka

Prinsip Segregasi Antarmuka (ISP) adalah tentang komunikasi bisnis-logika-ke-klien. Ini menyatakan bahwa “Tidak ada klien yang harus dipaksa untuk bergantung pada metode yang tidak digunakannya. ” Ini berarti bahwa alih-alih memiliki satu antarmuka monolitik yang perlu diimplementasikan oleh semua kelas yang sesuai, kita harus menyediakan satu set antarmuka yang lebih kecil, konsep-spesifik yang diimplementasikan oleh satu atau lebih kelas yang sesuai.

Misalnya, kelas

brew unlink php
brew link --overwrite [email protected]
_59 atau
brew unlink php
brew link --overwrite [email protected]
60 akan tertarik dengan metode
brew unlink php
brew link --overwrite [email protected]
61, tetapi kelas
brew unlink php
brew link --overwrite [email protected]
62 atau
brew unlink php
brew link --overwrite [email protected]
63 tidak akan. Sebaliknya, kelas
brew unlink php
brew link --overwrite [email protected]
_62 atau
brew unlink php
brew link --overwrite [email protected]
63 akan tertarik dengan metode
brew unlink php
brew link --overwrite [email protected]
66, tetapi kelas
brew unlink php
brew link --overwrite [email protected]
59 atau
brew unlink php
brew link --overwrite [email protected]
60 tidak akan. Tidak perlu semua jenis kendaraan ini mengimplementasikan dukungan untuk
brew unlink php
brew link --overwrite [email protected]
61 serta
brew unlink php
brew link --overwrite [email protected]
66, jadi kita harus memisahkan antarmuka sumber

Prinsip Pembalikan Ketergantungan

Prinsip Inversi Ketergantungan adalah tentang menghapus hard-link antara kelas-kelas diskrit sehingga fungsionalitas baru dapat dimanfaatkan dengan melewati kelas yang berbeda. Ini menyatakan bahwa seseorang harus “Bergantung pada Abstraksi. Jangan bergantung pada beton. ”. Sederhananya, ini berarti dependensi kita harus berupa antarmuka/kontrak atau kelas abstrak daripada implementasi konkret. Kita dapat dengan mudah memperbaiki contoh di atas untuk mengikuti prinsip ini

sudo port install php74
sudo port install php82
_3

Ada beberapa manfaat untuk kelas

brew unlink php
brew link --overwrite [email protected]
_43 sekarang tergantung pada antarmuka daripada konkresi

Pertimbangkan bahwa kami bekerja dalam tim dan adaptor sedang dikerjakan oleh seorang kolega. Dalam contoh pertama kami, kami harus menunggu kolega tersebut menyelesaikan adaptor sebelum kami dapat mengejeknya dengan benar untuk pengujian unit kami. Sekarang ketergantungannya adalah antarmuka/kontrak, kami dapat dengan senang hati mengejek antarmuka itu dengan mengetahui bahwa kolega kami akan membuat adaptor berdasarkan kontrak itu

Manfaat yang lebih besar dari metode ini adalah kode kita sekarang jauh lebih terukur. Jika setahun ke depan kami memutuskan bahwa kami ingin bermigrasi ke jenis database yang berbeda, kami dapat menulis adaptor yang mengimplementasikan antarmuka asli dan memasukkannya, sebagai gantinya, tidak diperlukan pemfaktoran ulang lagi karena kami dapat memastikan bahwa adaptor mengikuti

Wadah

Hal pertama yang harus Anda pahami tentang Wadah Injeksi Ketergantungan adalah bahwa mereka tidak sama dengan Injeksi Ketergantungan. Kontainer adalah utilitas praktis yang membantu kita mengimplementasikan Injeksi Ketergantungan, namun, wadah tersebut dapat dan sering disalahgunakan untuk mengimplementasikan anti-pola, Lokasi Layanan. Menyuntikkan wadah DI sebagai Pencari Layanan ke dalam kelas Anda bisa dibilang menciptakan ketergantungan yang lebih sulit pada wadah daripada ketergantungan yang Anda ganti. Itu juga membuat kode Anda menjadi kurang transparan dan pada akhirnya lebih sulit untuk diuji

Sebagian besar kerangka kerja modern memiliki Wadah Injeksi Ketergantungan mereka sendiri yang memungkinkan Anda menghubungkan ketergantungan Anda bersama-sama melalui konfigurasi. What this means in practice is that you can write application code that is as clean and de-coupled as the framework it is built on

Bacaan lebih lanjut

Sering kali kode PHP Anda akan menggunakan database untuk menyimpan informasi. Anda memiliki beberapa opsi untuk terhubung dan berinteraksi dengan database Anda. The recommended option until PHP 5. 1. 0 adalah menggunakan driver asli seperti mysql, postgresql, mssql, dll

Driver asli bagus jika Anda hanya menggunakan satu database dalam aplikasi Anda, tetapi jika, misalnya, Anda menggunakan MySQL dan sedikit MSSQL, atau Anda perlu terhubung ke database Oracle, maka Anda tidak akan dapat menggunakan . Anda harus mempelajari API baru untuk setiap database — dan itu bisa konyol

Ekstensi MySQL

The mysql extension for PHP is incredibly old and has been superseded by two other extensions

Not only did development stop long ago on mysql, but it has been officially removed in PHP 7. 0

To save digging into your

brew unlink php
brew link --overwrite [email protected]
81 settings to see which module you are using, one option is to search for
brew unlink php
brew link --overwrite [email protected]
73 in your editor of choice. If any functions such as
brew unlink php
brew link --overwrite [email protected]
74 and
brew unlink php
brew link --overwrite [email protected]
75 show up, then
brew unlink php
brew link --overwrite [email protected]
76 is in use

Even if you are not using PHP 7. x or later yet, failing to consider this upgrade as soon as possible will lead to greater hardship when the PHP upgrade does come about. The best option is to replace mysql usage with mysqli or PDO in your applications within your own development schedules so you won’t be rushed later on

If you are upgrading from mysql to mysqli, beware lazy upgrade guides that suggest you can simply find and replace

brew unlink php
brew link --overwrite [email protected]
73 with
brew unlink php
brew link --overwrite [email protected]
78. Not only is that a gross oversimplification, it misses out on the advantages that mysqli provides, such as parameter binding, which is also offered in PDO

PDO Extension

PDO is a database connection abstraction library — built into PHP since 5. 1. 0 — that provides a common interface to talk with many different databases. For example, you can use basically identical code to interface with MySQL or SQLite

sudo port install php74
sudo port install php82
4

PDO will not translate your SQL queries or emulate missing features; it is purely for connecting to multiple types of database with the same API

More importantly,

brew unlink php
brew link --overwrite [email protected]
79 allows you to safely inject foreign input (e. g. IDs) into your SQL queries without worrying about database SQL injection attacks. This is possible using PDO statements and bound parameters

Let’s assume a PHP script receives a numeric ID as a query parameter. This ID should be used to fetch a user record from a database. This is the

brew unlink php
brew link --overwrite [email protected]
80 way to do this

sudo port install php74
sudo port install php82
5

This is terrible code. You are inserting a raw query parameter into a SQL query. This will get you hacked in a heartbeat, using a practice called SQL Injection. Just imagine if a hacker passes in an inventive

brew unlink php
brew link --overwrite [email protected]
81 parameter by calling a URL like
brew unlink php
brew link --overwrite [email protected]
82. This will set the
brew unlink php
brew link --overwrite [email protected]
83 variable to
brew unlink php
brew link --overwrite [email protected]
84 which will delete all of your users. Instead, you should sanitize the ID input using PDO bound parameters

sudo port install php74
sudo port install php82
6

This is correct code. It uses a bound parameter on a PDO statement. This escapes the foreign input ID before it is introduced to the database preventing potential SQL injection attacks

For writes, such as INSERT or UPDATE, it’s especially critical to still first and sanitize it for other things (removal of HTML tags, JavaScript, etc). PDO will only sanitize it for SQL, not for your application

You should also be aware that database connections use up resources and it was not unheard-of to have resources exhausted if connections were not implicitly closed, however this was more common in other languages. Using PDO you can implicitly close the connection by destroying the object by ensuring all remaining references to it are deleted, i. e. set to NULL. If you don’t do this explicitly, PHP will automatically close the connection when your script ends - unless of course you are using persistent connections

Interacting with Databases

When developers first start to learn PHP, they often end up mixing their database interaction up with their presentation logic, using code that might look like this

sudo port install php74
sudo port install php82
7

This is bad practice for all sorts of reasons, mainly that it’s hard to debug, hard to test, hard to read and it is going to output a lot of fields if you don’t put a limit on there

While there are many other solutions to doing this - depending on if you prefer or - there must be some element of separation

Consider the most basic step

sudo port install php74
sudo port install php82
8

That is a good start. Put those two items in two different files and you’ve got some clean separation

Create a class to place that method in and you have a “Model”. Create a simple

brew unlink php
brew link --overwrite [email protected]
85 file to put the presentation logic in and you have a “View”, which is very nearly MVC - a common OOP architecture for most

foo. php

sudo port install php74
sudo port install php82
9

models/FooModel. php

sudo port select --set php php82
0

views/foo-list. php

sudo port select --set php php82
1

This is essentially the same as what most modern frameworks are doing, albeit a little more manual. You might not need to do all of that every time, but mixing together too much presentation logic and database interaction can be a real problem if you ever want to your application

Abstraction Layers

Many frameworks provide their own abstraction layer which may or may not sit on top of PDO. These will often emulate features for one database system that is missing from another by wrapping your queries in PHP methods, giving you actual database abstraction instead of just the connection abstraction that PDO provides. This will of course add a little overhead, but if you are building a portable application that needs to work with MySQL, PostgreSQL and SQLite then a little overhead will be worth it for the sake of code cleanliness

Some abstraction layers have been built using the PSR-0 or PSR-4 namespace standards so can be installed in any application you like

Templates provide a convenient way of separating your controller and domain logic from your presentation logic. Templates typically contain the HTML of your application, but may also be used for other formats, such as XML. Templates are often referred to as “views”, which make up part of the second component of the (MVC) software architecture pattern

Benefits

The main benefit to using templates is the clear separation they create between the presentation logic and the rest of your application. Templates have the sole responsibility of displaying formatted content. They are not responsible for data lookup, persistence or other more complex tasks. This leads to cleaner, more readable code which is especially helpful in a team environment where developers work on the server-side code (controllers, models) and designers work on the client-side code (markup)

Templates also improve the organization of presentation code. Template biasanya ditempatkan di folder "tampilan", masing-masing ditentukan dalam satu file. This approach encourages code reuse where larger blocks of code are broken into smaller, reusable pieces, often called partials. For example, your site header and footer can each be defined as templates, which are then included before and after each page template

Finally, depending on the library you use, templates can offer more security by automatically escaping user-generated content. Some libraries even offer sand-boxing, where template designers are only given access to white-listed variables and functions

Plain PHP Templates

Plain PHP templates are simply templates that use native PHP code. They are a natural choice since PHP is actually a template language itself. That simply means that you can combine PHP code within other code, like HTML. This is beneficial to PHP developers as there is no new syntax to learn, they know the functions available to them, and their code editors already have PHP syntax highlighting and auto-completion built-in. Further, plain PHP templates tend to be very fast as no compiling stage is required

Every modern PHP framework employs some kind of template system, most of which use plain PHP by default. Outside of frameworks, libraries like Plates or Aura. View make working with plain PHP templates easier by offering modern template functionality such as inheritance, layouts and extensions

Simple example of a plain PHP template

Using the Plates library

sudo port select --set php php82
2

Example of plain PHP templates using inheritance

Using the Plates library

sudo port select --set php php82
3
sudo port select --set php php82
4

Compiled Templates

While PHP has evolved into a mature, object oriented language, it hasn’t improved much as a templating language. Compiled templates, like Twig, Brainy, or Smarty*, fill this void by offering a new syntax that has been geared specifically to templating. From automatic escaping, to inheritance and simplified control structures, compiled templates are designed to be easier to write, cleaner to read and safer to use. Compiled templates can even be shared across different languages, Mustache being a good example of this. Since these templates must be compiled there is a slight performance hit, however this is very minimal when proper caching is used

*While Smarty offers automatic escaping, this feature is NOT enabled by default

Simple example of a compiled template

Using the Twig library

sudo port select --set php php82
5

Example of compiled templates using inheritance

Using the Twig library

sudo port select --set php php82
6
sudo port select --set php php82
7

Bacaan lebih lanjut

Articles & Tutorials

Libraries

Errors

In many “exception-heavy” programming languages, whenever anything goes wrong an exception will be thrown. This is certainly a viable way to do things, but PHP is an “exception-light” programming language. While it does have exceptions and more of the core is starting to use them when working with objects, most of PHP itself will try to keep processing regardless of what happens, unless a fatal error occurs

For example

sudo port select --set php php82
8

This is only a notice error, and PHP will happily carry on. This can be confusing for those coming from “exception-heavy” languages, because referencing a missing variable in Python for example will throw an exception

sudo port select --set php php82
9

The only real difference is that Python will freak out over any small thing, so that developers can be super sure any potential issue or edge-case is caught, whereas PHP will keep on processing unless something extreme happens, at which point it will throw an error and report it

Error Severity

PHP has several levels of error severity. The three most common types of messages are errors, notices and warnings. These have different levels of severity;

brew unlink php
brew link --overwrite [email protected]
86,
brew unlink php
brew link --overwrite [email protected]
87, and
brew unlink php
brew link --overwrite [email protected]
88. Errors are fatal run-time errors and are usually caused by faults in your code and need to be fixed as they’ll cause PHP to stop executing. Notices are advisory messages caused by code that may or may not cause problems during the execution of the script, execution is not halted. Warnings are non-fatal errors, execution of the script will not be halted

Another type of error message reported at compile time are

brew unlink php
brew link --overwrite [email protected]
89 messages. These messages are used to suggest changes to your code to help ensure best interoperability and forward compatibility with upcoming versions of PHP

Changing PHP’s Error Reporting Behaviour

Error Reporting can be changed by using PHP settings and/or PHP function calls. Using the built in PHP function

brew unlink php
brew link --overwrite [email protected]
90 you can set the level of errors for the duration of the script execution by passing one of the predefined error level constants, meaning if you only want to see Errors and Warnings - but not Notices - then you can configure that

brew unlink php
brew link --overwrite [email protected]
6
brew unlink php
brew link --overwrite [email protected]
91. You put this operator at the beginning of an expression, and any error that’s a direct result of the expression is silenced

brew unlink php
brew link --overwrite [email protected]
6
brew unlink php
brew link --overwrite [email protected]
92 if it exists, but will simply return a null and print nothing if the variable
brew unlink php
brew link --overwrite [email protected]
93 or
brew unlink php
brew link --overwrite [email protected]
94 key does not exist. Without the error control operator, this expression could create a
brew unlink php
brew link --overwrite [email protected]
95 or
brew unlink php
brew link --overwrite [email protected]
96 error

This might seem like a good idea, but there are a few undesirable tradeoffs. PHP handles expressions using an

brew unlink php
brew link --overwrite [email protected]
97 in a less performant way than expressions without an
brew unlink php
brew link --overwrite [email protected]
97. Premature optimization may be the root of all programming arguments, but if performance is particularly important for your application/library it’s important to understand the error control operator’s performance implications

Secondly, the error control operator completely swallows the error. The error is not displayed, and the error is not sent to the error log. Also, stock/production PHP systems have no way to turn off the error control operator. Meskipun Anda mungkin benar bahwa kesalahan yang Anda lihat tidak berbahaya, kesalahan lain yang tidak terlalu berbahaya akan tetap diam

If there’s a way to avoid the error suppression operator, you should consider it. For example, our code above could be rewritten like this

brew unlink php
brew link --overwrite [email protected]
6
brew unlink php
brew link --overwrite [email protected]
99 fails to find a file to load. You could check for the existence of the file before you try to load it, but if the file is deleted after the check and before the
sudo port install php74
sudo port install php82
00 (which might sound impossible, but it can happen) then
sudo port install php74
sudo port install php82
00 will return false and throw an error. This is potentially something PHP should resolve, but is one case where error suppression might seem like the only valid solution

Sebelumnya kami menyebutkan bahwa tidak ada cara dalam sistem stok PHP untuk mematikan operator kontrol kesalahan. However, Xdebug has an

sudo port install php74
sudo port install php82
02 ini setting which will disable the error control operator. Anda dapat mengatur ini melalui file
brew unlink php
brew link --overwrite [email protected]
_81 Anda dengan yang berikut ini

phpcs -sw --standard=PSR1 file.php
3

You can also set this value at runtime with the

sudo port install php74
sudo port install php82
04 function

brew unlink php
brew link --overwrite [email protected]
6
sudo port install php74
sudo port install php82
05 kelas, yang memperluas kelas
sudo port install php74
sudo port install php82
06

Ini adalah praktik umum yang diterapkan oleh sejumlah besar kerangka kerja modern seperti Symfony dan Laravel. Dalam mode debug (atau mode dev), kedua kerangka kerja ini akan menampilkan jejak tumpukan yang bagus dan bersih

Ada juga beberapa paket yang tersedia untuk penanganan dan pelaporan kesalahan dan pengecualian yang lebih baik. Seperti Ups. , yang disertakan dengan instalasi default Laravel dan dapat digunakan dalam kerangka apa pun juga

Dengan melempar kesalahan sebagai pengecualian dalam pengembangan, Anda dapat menanganinya lebih baik dari hasil biasanya, dan jika Anda melihat pengecualian selama pengembangan, Anda dapat membungkusnya dalam pernyataan catch dengan instruksi khusus tentang cara menangani situasi tersebut. Setiap pengecualian yang Anda tangkap secara instan membuat aplikasi Anda sedikit lebih kuat

Informasi lebih lanjut tentang ini dan detail tentang cara menggunakan

sudo port install php74
sudo port install php82
07 dengan penanganan kesalahan dapat ditemukan di Kelas ErrorException

sudo port install php74
sudo port install php82
_08 biasanya hanya akan memberi Anda
sudo port install php74
sudo port install php82
09 dan peringatan. Banyak kerangka kerja PHP lama seperti CodeIgniter hanya akan mengembalikan kesalahan, mencatat pesan ke log kepemilikan mereka dan mungkin membiarkan Anda menggunakan metode seperti
sudo port install php74
sudo port install php82
10 untuk melihat apa yang salah. Masalahnya di sini adalah Anda harus mencari kesalahan dan memeriksa dokumen untuk melihat apa metode kesalahan untuk kelas ini, alih-alih membuatnya menjadi 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 untuk dapat menangani kesalahan itu secara dinamis. Pengecualian harus dilemparkan untuk membuat pengembang menyadari kesalahan; . e. g

phpcs -sw --standard=PSR1 file.php
5

SPL Exceptions

Kelas

sudo port install php74
sudo port install php82
_06 generik menyediakan sangat sedikit konteks debug untuk pengembang;

brew unlink php
brew link --overwrite [email protected]
6

This means you can add multiple catch blocks and handle different Exceptions differently. This can lead to the creation of a lot of custom Exceptions, some of which could have been avoided using the SPL Exceptions provided in the .

If for example you use the ________22_______8 Magic Method and an invalid method is requested then instead of throwing a standard Exception which is vague, or creating a custom Exception just for that, you could just ________16_______15.

sudo port install php74
sudo port install php82
16

Di PHP5. 5

sudo port install php74
sudo port install php82
_17 diperkenalkan. Saat ini menggunakan BCrypt, algoritma terkuat yang saat ini didukung oleh PHP. Ini akan diperbarui di masa mendatang untuk mendukung lebih banyak algoritme sesuai kebutuhan. Pustaka
sudo port install php74
sudo port install php82
_18 dibuat untuk memberikan kompatibilitas maju untuk PHP >= 5. 3. 7

Di bawah ini kita hash string, dan kemudian periksa hash terhadap string baru. Karena dua string sumber kami berbeda ('secret-password' vs. 'bad-password') login ini akan gagal

brew unlink php
brew link --overwrite [email protected]
6

________16_______17 takes care of password salting for you. The salt is stored, along with the algorithm and “cost”, as part of the hash. ________16_______20 extracts this to determine how to check the password, so you don’t need a separate database field to store your salts.

sudo port install php74
sudo port install php82
21 and
sudo port install php74
sudo port install php82
22 functions can sanitize text and validate text formats (e. g. alamat email)

Masukan asing bisa berupa apa saja.

sudo port install php74
sudo port install php82
_23 dan
sudo port install php74
sudo port install php82
24 dari input data, beberapa nilai dalam
sudo port install php74
sudo port install php82
25 superglobal, dan badan permintaan HTTP melalui
sudo port install php74
sudo port install php82
26. Ingat, input asing tidak terbatas pada formulir data yang dikirimkan oleh pengguna. File yang diunggah dan diunduh, nilai sesi, data cookie, dan data dari layanan web pihak ketiga juga merupakan input asing

Sementara data asing dapat disimpan, digabungkan, dan diakses nanti, itu masih merupakan input asing. Setiap kali Anda memproses, mengeluarkan, menggabungkan, atau menyertakan data dalam kode Anda, tanyakan pada diri Anda apakah data tersebut difilter dengan benar dan apakah dapat dipercaya

Data dapat difilter secara berbeda berdasarkan tujuannya. Misalnya, ketika input asing tanpa filter diteruskan ke output halaman HTML, itu dapat mengeksekusi HTML dan JavaScript di situs Anda. Ini dikenal sebagai Cross-Site Scripting (XSS) dan bisa menjadi serangan yang sangat berbahaya. Salah satu cara untuk menghindari XSS adalah membersihkan semua data yang dihasilkan pengguna sebelum mengeluarkannya ke halaman Anda dengan menghapus tag HTML dengan fungsi

sudo port install php74
sudo port install php82
27 atau mengubah karakter dengan arti khusus ke dalam entitas HTML masing-masing dengan fungsi
brew unlink php
brew link --overwrite [email protected]
59 atau
brew unlink php
brew link --overwrite [email protected]
61

Contoh lain adalah melewati opsi untuk dieksekusi pada baris perintah. This can be extremely dangerous (and is usually a bad idea), but you can use the built-in

sudo port install php74
sudo port install php82
30 function to sanitize the executed command’s arguments

Satu contoh terakhir adalah menerima input asing untuk menentukan file yang akan dimuat dari sistem file. Ini dapat dimanfaatkan dengan mengubah nama file menjadi jalur file. Anda harus menghapus

sudo port install php74
sudo port install php82
31,
sudo port install php74
sudo port install php82
32, null byte, atau karakter lain dari jalur file sehingga tidak dapat memuat file tersembunyi, non-publik, atau sensitif

Sanitasi

Sanitasi menghapus (atau lolos) karakter ilegal atau tidak aman dari input asing

Misalnya, Anda harus membersihkan masukan asing sebelum menyertakan masukan dalam HTML atau memasukkannya ke dalam kueri SQL mentah. Saat Anda menggunakan parameter terikat dengan , itu akan membersihkan input untuk Anda

Kadang-kadang diperlukan untuk mengizinkan beberapa tag HTML yang aman di input saat memasukkannya ke dalam halaman HTML. Ini sangat sulit dilakukan dan banyak yang menghindarinya dengan menggunakan pemformatan lain yang lebih terbatas seperti Markdown atau BBCode, meskipun pustaka daftar putih seperti HTML Purifier ada karena alasan ini

Lihat Filter Sanitasi

Unserialisasi

It is dangerous to

sudo port install php74
sudo port install php82
33 data from users or other untrusted sources. Melakukan hal itu dapat memungkinkan pengguna jahat untuk membuat instance objek (dengan properti yang ditentukan pengguna) yang destruktornya akan dieksekusi, bahkan jika objek itu sendiri tidak digunakan. Oleh karena itu, Anda harus menghindari unserializing data yang tidak dipercaya

Jika Anda benar-benar harus membatalkan serial data dari sumber yang tidak tepercaya, gunakan opsi

sudo port install php74
sudo port install php82
34 PHP 7 untuk membatasi jenis objek mana yang diizinkan untuk dibatalkan serialnya

Validasi

Validasi memastikan bahwa input asing adalah yang Anda harapkan. Misalnya, Anda mungkin ingin memvalidasi alamat email, nomor telepon, atau usia saat memproses pengiriman pendaftaran

See Validation Filters

File Konfigurasi

Saat membuat file konfigurasi untuk aplikasi Anda, praktik terbaik menyarankan agar salah satu metode berikut diikuti

  • Direkomendasikan agar Anda menyimpan informasi konfigurasi Anda di tempat yang tidak dapat diakses secara langsung dan ditarik melalui sistem file
  • Jika Anda harus menyimpan file konfigurasi di root dokumen, beri nama file dengan ekstensi
    brew unlink php
    brew link --overwrite [email protected]
    
    85. Ini memastikan bahwa, meskipun skrip diakses secara langsung, itu tidak akan ditampilkan sebagai teks biasa
  • Informasi dalam file konfigurasi harus dilindungi sebagaimana mestinya, baik melalui enkripsi atau izin sistem file grup/pengguna
  • Sebaiknya pastikan bahwa Anda tidak mengkomit file konfigurasi yang berisi informasi sensitif e. g. passwords or API tokens to source control

Register Globals

CATATAN. Mulai dari PHP5. 4. 0 the

sudo port install php74
sudo port install php82
36 setting has been removed and can no longer be used. Ini hanya disertakan sebagai peringatan bagi siapa pun yang sedang dalam proses memutakhirkan aplikasi lawas

Saat diaktifkan, pengaturan konfigurasi

sudo port install php74
sudo port install php82
_36 membuat beberapa jenis variabel (termasuk yang dari
sudo port install php74
sudo port install php82
24,
sudo port install php74
sudo port install php82
23 dan
sudo port install php74
sudo port install php82
40) tersedia dalam cakupan global aplikasi Anda. Ini dapat dengan mudah menyebabkan masalah keamanan karena aplikasi Anda tidak dapat secara efektif mengetahui dari mana data berasal

Misalnya.

sudo port install php74
sudo port install php82
_41 akan tersedia melalui
brew unlink php
brew link --overwrite [email protected]
93, yang dapat menggantikan variabel yang telah dideklarasikan

If you are using PHP < 5. 4. 0 pastikan

sudo port install php74
sudo port install php82
36 tidak aktif

Pelaporan Kesalahan

Error logging can be useful in finding the problem spots in your application, but it can also expose information about the structure of your application to the outside world. Untuk melindungi aplikasi Anda secara efektif dari masalah yang dapat disebabkan oleh keluaran pesan ini, Anda perlu mengonfigurasi server secara berbeda dalam pengembangan versus produksi (langsung)

Development

Untuk menampilkan setiap kemungkinan kesalahan selama pengembangan, konfigurasikan pengaturan berikut di

brew unlink php
brew link --overwrite [email protected]
81 Anda

phpcs -sw --standard=PSR1 file.php
8

Melewati nilai

sudo port install php74
sudo port install php82
_45 akan menampilkan setiap kesalahan yang mungkin terjadi, bahkan ketika level dan konstanta baru ditambahkan di versi PHP yang akan datang. Konstanta
sudo port install php74
sudo port install php82
_46 juga berperilaku seperti ini pada PHP 5. 4. - php. bersih

Konstanta tingkat kesalahan

brew unlink php
brew link --overwrite [email protected]
_89 diperkenalkan pada 5. 3. 0 dan bukan bagian dari
sudo port install php74
sudo port install php82
_46, namun menjadi bagian dari
sudo port install php74
sudo port install php82
46 di 5. 4. 0. Apa artinya ini? . 3 itu berarti Anda harus menggunakan
sudo port install php74
sudo port install php82
45 atau
sudo port install php74
sudo port install php82
51

Melaporkan setiap kemungkinan kesalahan berdasarkan versi PHP

  • < 5.3
    sudo port install php74
    sudo port install php82
    
    45 or
    sudo port install php74
    sudo port install php82
    
    46
  • 5. 3
    sudo port install php74
    sudo port install php82
    
    _45 atau
    sudo port install php74
    sudo port install php82
    
    51
  • > 5. 3
    sudo port install php74
    sudo port install php82
    
    45 or
    sudo port install php74
    sudo port install php82
    
    46

Production

Untuk menyembunyikan kesalahan pada lingkungan produksi Anda, konfigurasikan

brew unlink php
brew link --overwrite [email protected]
81 Anda sebagai

phpcs -sw --standard=PSR1 file.php
_9

Dengan pengaturan ini dalam produksi, kesalahan akan tetap dicatat ke log kesalahan untuk server web, tetapi tidak akan ditampilkan kepada pengguna. Untuk informasi lebih lanjut tentang pengaturan ini, lihat manual PHP

Menulis pengujian otomatis untuk kode PHP Anda dianggap sebagai praktik terbaik dan dapat menghasilkan aplikasi yang dibangun dengan baik. Tes otomatis adalah alat yang hebat untuk memastikan aplikasi Anda tidak rusak saat Anda membuat perubahan atau menambahkan fungsionalitas baru dan tidak boleh diabaikan

Ada beberapa jenis alat pengujian (atau kerangka kerja) berbeda yang tersedia untuk PHP, yang menggunakan pendekatan berbeda - semuanya mencoba menghindari pengujian manual dan kebutuhan tim Jaminan Kualitas yang besar, hanya untuk memastikan perubahan terbaru tidak merusak yang ada.

Test Driven Development

From Wikipedia

Test-driven development (TDD) is a software development process that relies on the repetition of a very short development cycle. first the developer writes a failing automated test case that defines a desired improvement or new function, then produces code to pass that test and finally refactors the new code to acceptable standards. Kent Beck, yang dianggap telah mengembangkan atau 'menemukan kembali' teknik tersebut, menyatakan pada tahun 2003 bahwa TDD mendorong desain sederhana dan menginspirasi kepercayaan diri.

Ada beberapa jenis pengujian yang dapat Anda lakukan untuk aplikasi Anda

Unit Testing

Pengujian Unit adalah pendekatan pemrograman untuk memastikan fungsi, kelas, dan metode berfungsi seperti yang diharapkan, sejak Anda membangunnya hingga siklus pengembangan. Dengan memeriksa nilai masuk dan keluar dari berbagai fungsi dan metode, Anda dapat memastikan logika internal bekerja dengan benar. Dengan menggunakan Injeksi Ketergantungan dan membangun kelas dan rintisan "tiruan", Anda dapat memverifikasi bahwa ketergantungan digunakan dengan benar untuk cakupan pengujian yang lebih baik

Saat Anda membuat kelas atau fungsi, Anda harus membuat pengujian unit untuk setiap perilaku yang harus dimiliki. Pada tingkat yang paling dasar, Anda harus memastikan kesalahan jika Anda mengirimkannya argumen yang buruk dan memastikannya berfungsi jika Anda mengirimkannya argumen yang valid. Ini akan membantu memastikan bahwa ketika Anda membuat perubahan pada kelas atau fungsi ini nanti dalam siklus pengembangan, fungsionalitas lama terus bekerja seperti yang diharapkan. Satu-satunya alternatif untuk ini adalah

" . PHP_EOL;
    exit(1);
}
$name = $argv[1];
echo "Hello, $name" . PHP_EOL;
8 dalam sebuah ujian. php, which is no way to build an application - large or small

Penggunaan lain untuk pengujian unit berkontribusi pada open source. If you can write a test that shows broken functionality (i. e. fails), then fix it, and show the test passing, patches are much more likely to be accepted. Jika Anda menjalankan proyek yang menerima permintaan penarikan maka Anda harus menyarankan ini sebagai persyaratan

PHPUnit adalah kerangka pengujian de-facto untuk menulis pengujian unit untuk aplikasi PHP, tetapi ada beberapa alternatif

Tes integrasi

From Wikipedia

Pengujian integrasi (kadang-kadang disebut Integrasi dan Pengujian, disingkat "I&T") adalah fase dalam pengujian perangkat lunak di mana masing-masing modul perangkat lunak digabungkan dan diuji sebagai sebuah kelompok. Itu terjadi setelah pengujian unit dan sebelum pengujian validasi. Pengujian integrasi mengambil modul input yang telah diuji unitnya, mengelompokkannya dalam agregat yang lebih besar, menerapkan pengujian yang ditentukan dalam rencana pengujian integrasi ke agregat tersebut, dan mengirimkan sebagai outputnya sistem terintegrasi yang siap untuk pengujian sistem

Banyak alat yang sama yang dapat digunakan untuk pengujian unit dapat digunakan untuk pengujian integrasi karena banyak prinsip yang sama digunakan

Pengujian Fungsional

Sometimes also known as acceptance testing, functional testing consists of using tools to create automated tests that actually use your application instead of just verifying that individual units of code are behaving correctly and that individual units can speak to each other correctly. These tools typically work using real data and simulating actual users of the application

Alat Pengujian Fungsional

  • Selenium
  • Cerpelai
  • Codeception is a full-stack testing framework that includes acceptance testing tools
  • Storyplayer adalah full-stack testing framework yang menyertakan dukungan untuk membuat dan menghancurkan lingkungan pengujian sesuai permintaan

Perkembangan Berbasis Perilaku

There are two different types of Behavior-Driven Development (BDD). SpecBDD dan StoryBDD. SpecBDD focuses on technical behavior of code, while StoryBDD focuses on business or feature behaviors or interactions. PHP has frameworks for both types of BDD

With StoryBDD, you write human-readable stories that describe the behavior of your application. These stories can then be run as actual tests against your application. Kerangka kerja yang digunakan dalam aplikasi PHP untuk StoryBDD adalah Behat, yang terinspirasi dari proyek Ruby's Cucumber dan mengimplementasikan Gherkin DSL untuk menggambarkan perilaku fitur.

With SpecBDD, you write specifications that describe how your actual code should behave. Alih-alih menguji fungsi atau metode, Anda menjelaskan bagaimana fungsi atau metode itu seharusnya berperilaku. PHP offers the PHPSpec framework for this purpose. Framework ini terinspirasi oleh proyek RSpec untuk Ruby

  • Behat, kerangka kerja StoryBDD untuk PHP, terinspirasi oleh proyek Ketimun Ruby;
  • PHPSpec, kerangka kerja SpecBDD untuk PHP, terinspirasi oleh proyek RSpec Ruby;
  • Codeception adalah full-stack testing framework yang menggunakan prinsip BDD

Selain pengujian individu dan kerangka kerja berbasis perilaku, ada juga sejumlah kerangka kerja umum dan pustaka pembantu yang berguna untuk pendekatan pilihan yang diambil

Aplikasi PHP dapat digunakan dan dijalankan di server web produksi dalam beberapa cara

Platform sebagai Layanan (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, menghosting, dan menskalakan aplikasi PHP dari semua ukuran. Anda dapat menemukan daftar di kami

Membangun dan Menerapkan Aplikasi Anda

If you find yourself doing manual database schema changes or running your tests manually before updating your files (manually), think twice. Dengan setiap tugas manual tambahan yang diperlukan untuk menerapkan versi baru aplikasi Anda, kemungkinan terjadinya kesalahan yang berpotensi fatal meningkat. Apakah Anda berurusan dengan pembaruan sederhana, proses pembuatan yang komprehensif, atau bahkan strategi integrasi berkelanjutan, otomatisasi pembuatan adalah teman Anda

Di antara tugas yang mungkin ingin Anda otomatisasi adalah

  • Manajemen ketergantungan
  • Kompilasi, minifikasi aset Anda
  • Menjalankan tes
  • Pembuatan dokumentasi
  • Kemasan
  • Penyebaran

Alat penerapan dapat digambarkan sebagai kumpulan skrip yang menangani tugas umum penerapan perangkat lunak. Alat penerapan bukan bagian dari perangkat lunak Anda, alat ini bekerja pada perangkat lunak Anda dari 'luar'

There are many open source tools available to help you with build automation and deployment, some are written in PHP others aren’t. Ini seharusnya tidak menghalangi Anda untuk menggunakannya, jika mereka lebih cocok untuk pekerjaan tertentu. Berikut beberapa contohnya

Phing dapat mengontrol pengemasan, penerapan, atau proses pengujian Anda dari dalam file build XML. Phing (yang didasarkan pada Apache Ant) menyediakan sekumpulan tugas yang biasanya diperlukan untuk menginstal atau memperbarui aplikasi web dan dapat diperluas dengan tugas khusus tambahan, yang ditulis dalam PHP. Ini adalah alat yang solid dan kuat dan telah ada sejak lama, namun alat tersebut dapat dianggap agak kuno karena caranya menangani konfigurasi (file XML)

Capistrano adalah sistem untuk pemrogram menengah hingga lanjutan untuk mengeksekusi perintah dengan cara yang terstruktur dan dapat diulang pada satu atau lebih mesin jarak jauh. Ini sudah dikonfigurasi sebelumnya untuk menerapkan aplikasi Ruby on Rails, namun Anda dapat berhasil menerapkan sistem PHP dengannya. Keberhasilan penggunaan Capistrano tergantung pada pengetahuan tentang Ruby dan Rake

Ansistrano adalah beberapa peran yang memungkinkan untuk mengelola proses penerapan (penyebaran dan pengembalian) dengan mudah untuk aplikasi skrip seperti PHP, Python, dan Ruby. Ini adalah port yang memungkinkan untuk Capistrano. It’s been used by quite a lot of PHP companies already

Deployer adalah alat penerapan yang ditulis dalam PHP. Sederhana dan fungsional. Fitur termasuk menjalankan tugas secara paralel, penyebaran atom dan menjaga konsistensi antar server. Resep tugas umum untuk Symfony, Laravel, Zend Framework, dan Yii tersedia. Artikel Younes Rafie Penerapan Mudah Aplikasi PHP dengan Deployer adalah tutorial yang bagus untuk menerapkan aplikasi Anda dengan alat tersebut

Magallanes adalah alat lain yang ditulis dalam PHP dengan konfigurasi sederhana yang dilakukan dalam file YAML. Ini memiliki dukungan untuk beberapa server dan lingkungan, penyebaran atom, dan memiliki beberapa tugas bawaan yang dapat Anda manfaatkan untuk alat dan kerangka kerja umum

Bacaan lebih lanjut

Penyediaan Server

Mengelola dan mengonfigurasi server bisa menjadi tugas yang menakutkan ketika berhadapan dengan banyak server. Ada alat untuk menangani hal ini sehingga Anda dapat mengotomatiskan infrastruktur untuk memastikan Anda memiliki server yang tepat dan dikonfigurasi dengan benar. Mereka sering berintegrasi dengan penyedia cloud hosting yang lebih besar (Amazon Web Services, Heroku, DigitalOcean, dll) untuk mengelola instans, yang membuat penskalaan aplikasi jauh lebih mudah

Ansible adalah alat yang mengelola infrastruktur Anda melalui file YAML. Sangat mudah untuk memulai dan dapat mengelola aplikasi yang kompleks dan berskala besar. Ada API untuk mengelola instance cloud dan dapat mengelolanya melalui inventaris dinamis menggunakan alat tertentu

Wayang adalah alat yang memiliki bahasa dan tipe file sendiri untuk mengelola server dan konfigurasi. Ini dapat digunakan dalam pengaturan master/klien atau dapat digunakan dalam mode "tanpa master". Dalam mode master/klien, klien akan memilih master pusat untuk konfigurasi baru pada interval yang ditetapkan dan memperbarui sendiri jika perlu. Dalam mode tanpa master, Anda dapat mendorong perubahan ke node Anda

Chef adalah kerangka kerja integrasi sistem berbasis Ruby yang kuat yang dapat Anda gunakan untuk membangun seluruh lingkungan server atau kotak virtual Anda. Ini terintegrasi dengan baik dengan Amazon Web Services melalui layanan mereka yang disebut OpsWorks

Bacaan lebih lanjut

Integrasi Berkelanjutan

Integrasi Berkelanjutan adalah praktik pengembangan perangkat lunak di mana anggota tim sering mengintegrasikan pekerjaan mereka, biasanya setiap orang mengintegrasikan setidaknya setiap hari — mengarah ke beberapa integrasi per hari. Banyak tim menemukan bahwa pendekatan ini secara signifikan mengurangi masalah integrasi dan memungkinkan tim untuk mengembangkan perangkat lunak kohesif lebih cepat

– Martin Fowler

Ada berbagai cara untuk mengimplementasikan integrasi berkelanjutan untuk PHP. Travis CI telah melakukan pekerjaan yang hebat dalam mewujudkan integrasi berkelanjutan bahkan untuk proyek kecil. Travis CI adalah layanan integrasi berkelanjutan yang dihosting untuk komunitas open source. Itu terintegrasi dengan GitHub dan menawarkan dukungan kelas satu untuk banyak bahasa termasuk PHP

Bacaan lebih lanjut

Menjalankan aplikasi Anda di lingkungan yang berbeda dalam pengembangan dan produksi dapat menyebabkan munculnya bug aneh saat Anda ditayangkan. Juga sulit untuk selalu memperbarui lingkungan pengembangan yang berbeda dengan versi yang sama untuk semua pustaka yang digunakan saat bekerja dengan tim pengembang

Jika Anda mengembangkan di Windows dan menerapkan ke Linux (atau apa pun selain Windows) atau mengembangkan dalam tim, Anda harus mempertimbangkan untuk menggunakan mesin virtual. Kedengarannya rumit, tetapi selain lingkungan virtualisasi yang dikenal luas seperti VMware atau VirtualBox, ada alat tambahan yang dapat membantu Anda mengatur lingkungan virtual dalam beberapa langkah mudah.

Gelandangan

Vagrant membantu Anda membangun kotak virtual di atas lingkungan virtual yang diketahui dan akan mengonfigurasi lingkungan ini berdasarkan satu file konfigurasi. Kotak-kotak ini dapat diatur secara manual, atau Anda dapat menggunakan perangkat lunak "penyediaan" seperti Wayang atau Koki untuk melakukannya untuk Anda. Penyediaan kotak dasar adalah cara yang bagus untuk memastikan bahwa beberapa kotak disiapkan dengan cara yang sama dan menghilangkan kebutuhan Anda untuk memelihara daftar perintah "penyiapan" yang rumit. Anda juga dapat "menghancurkan" kotak dasar Anda dan membuatnya kembali tanpa banyak langkah manual, membuatnya mudah untuk membuat instalasi "segar"

Vagrant membuat folder untuk membagikan kode Anda antara host dan mesin virtual Anda, yang berarti Anda dapat membuat dan mengedit file di mesin host dan kemudian menjalankan kode di dalam mesin virtual Anda

Sedikit bantuan

Jika Anda memerlukan sedikit bantuan untuk mulai menggunakan Vagrant, ada beberapa layanan yang mungkin berguna

  • Boneka. GUI sederhana untuk menyiapkan mesin virtual untuk pengembangan PHP. Heavily focused in PHP. Selain VM lokal, ini juga dapat digunakan untuk menyebarkan ke layanan cloud. Penyediaan dilakukan dengan Puppet
  • mungkin. menyediakan antarmuka yang mudah digunakan yang membantu Anda membuat Playbook yang Memungkinkan untuk proyek berbasis PHP

Buruh pelabuhan

Docker - alternatif ringan untuk mesin virtual lengkap - disebut demikian karena ini semua tentang "kontainer". Wadah adalah blok bangunan yang, dalam kasus paling sederhana, melakukan satu pekerjaan tertentu, mis. g. menjalankan server web. "Gambar" adalah paket yang Anda gunakan untuk membuat wadah - Docker memiliki repositori yang penuh dengannya

Aplikasi LAMP tipikal mungkin memiliki tiga wadah. server web, proses PHP-FPM dan MySQL. Seperti halnya folder bersama di Vagrant, Anda dapat meninggalkan file aplikasi di tempatnya dan memberi tahu Docker di mana menemukannya

Anda dapat membuat kontainer dari baris perintah (lihat contoh di bawah) atau, untuk kemudahan pemeliharaan, buat file

sudo port install php74
sudo port install php82
60 untuk proyek Anda yang menentukan mana yang akan dibuat dan bagaimana mereka berkomunikasi satu sama lain

Docker dapat membantu jika Anda mengembangkan banyak situs web dan menginginkan pemisahan yang berasal dari menginstal masing-masing di mesin virtualnya sendiri, tetapi tidak memiliki ruang disk yang diperlukan atau waktu untuk memperbarui semuanya. Ini efisien. penginstalan dan pengunduhan lebih cepat, Anda hanya perlu menyimpan satu salinan dari setiap gambar betapapun sering digunakan, wadah membutuhkan lebih sedikit RAM dan berbagi kernel OS yang sama, sehingga Anda dapat menjalankan lebih banyak server secara bersamaan, dan hanya perlu beberapa detik untuk

Setelah menginstal buruh pelabuhan di mesin Anda, Anda dapat memulai server web dengan satu perintah. Berikut ini akan mengunduh instalasi Apache yang berfungsi penuh dengan versi PHP terbaru, petakan

sudo port install php74
sudo port install php82
61 ke root dokumen, yang dapat Anda lihat di
sudo port install php74
sudo port install php82
62

phpcbf -w --standard=PSR1 file.php
_0

Ini akan menginisialisasi dan meluncurkan wadah Anda.

sudo port install php74
sudo port install php82
_63 membuatnya berjalan di latar belakang. Untuk menghentikan dan memulainya, cukup jalankan
sudo port install php74
sudo port install php82
_64 dan
sudo port install php74
sudo port install php82
65 (parameter lain tidak diperlukan lagi)

Pelajari lebih lanjut tentang Docker

Perintah di atas menunjukkan cara cepat untuk menjalankan server dasar. Masih banyak lagi yang bisa Anda lakukan (dan ribuan gambar siap pakai di Docker Hub). Luangkan waktu untuk mempelajari terminologi dan baca Panduan Pengguna Docker untuk mendapatkan hasil maksimal darinya, dan jangan menjalankan kode acak yang telah Anda unduh tanpa memeriksa keamanannya – gambar tidak resmi mungkin tidak memiliki tambalan keamanan terbaru. Jika ragu, tetap gunakan repositori resmi

PHPDocker. Situs .io akan secara otomatis menghasilkan semua file yang Anda butuhkan untuk tumpukan LAMP/LEMP berfitur lengkap, termasuk pilihan versi dan ekstensi PHP Anda

PHP dengan sendirinya cukup cepat, tetapi hambatan dapat muncul saat Anda membuat koneksi jarak jauh, memuat file, dll. Untungnya, ada berbagai alat yang tersedia untuk mempercepat bagian-bagian tertentu dari aplikasi Anda, atau mengurangi berapa kali berbagai tugas yang memakan waktu ini perlu dijalankan.

Cache Opcode

Ketika file PHP dieksekusi, pertama-tama harus dikompilasi menjadi opcodes (instruksi bahasa mesin untuk CPU). Jika kode sumber tidak berubah, opcode akan sama, sehingga langkah kompilasi ini menjadi pemborosan sumber daya CPU

Cache opcode mencegah kompilasi yang berlebihan dengan menyimpan opcode di memori dan menggunakannya kembali pada panggilan yang berurutan. Biasanya akan memeriksa tanda tangan atau waktu modifikasi file terlebih dahulu, jika ada perubahan

Sepertinya cache opcode akan membuat peningkatan kecepatan yang signifikan pada aplikasi Anda. Sejak PHP5. 5 ada satu bawaan - Zend OPcache. Bergantung pada paket/distribusi PHP Anda, ini biasanya diaktifkan secara default - periksa dan keluaran

" . PHP_EOL;
    exit(1);
}
$name = $argv[1];
echo "Hello, $name" . PHP_EOL;
1 untuk memastikan. Untuk versi sebelumnya ada ekstensi PECL

Baca lebih lanjut tentang cache opcode

Caching Objek

Ada kalanya berguna untuk meng-cache objek individu dalam kode Anda, seperti dengan data yang mahal untuk didapatkan atau panggilan database di mana hasilnya tidak mungkin berubah. Anda dapat menggunakan perangkat lunak caching objek untuk menyimpan potongan data ini di memori untuk akses yang sangat cepat di kemudian hari. Jika Anda menyimpan item ini ke penyimpanan data setelah Anda mengambilnya, lalu menariknya langsung dari cache untuk permintaan berikut, Anda dapat memperoleh peningkatan kinerja yang signifikan serta mengurangi beban pada server database Anda

Banyak solusi caching bytecode yang populer memungkinkan Anda menyimpan data khusus juga, jadi ada lebih banyak alasan untuk memanfaatkannya. APCu dan WinCache menyediakan API untuk menyimpan data dari kode PHP Anda ke cache memori mereka

Sistem caching objek memori yang paling umum digunakan adalah APCu dan memcache. APCu adalah pilihan yang sangat baik untuk caching objek, itu termasuk API sederhana untuk menambahkan data Anda sendiri ke cache memorinya dan sangat mudah untuk mengatur dan menggunakan. Satu-satunya batasan nyata dari APCu adalah ia terkait dengan server tempat APCu diinstal. Memcached di sisi lain diinstal sebagai layanan terpisah dan dapat diakses di seluruh jaringan, artinya Anda dapat menyimpan objek dalam penyimpanan data yang sangat cepat di lokasi pusat dan banyak sistem berbeda dapat menarik darinya

Perhatikan bahwa saat menjalankan PHP sebagai (aplikasi Fastcgi di dalam server web Anda, setiap proses PHP akan memiliki cache sendiri, yaitu. e. Data APCu tidak dibagikan di antara proses pekerja Anda. Dalam kasus ini, Anda mungkin ingin mempertimbangkan untuk menggunakan memcache, karena tidak terkait dengan proses PHP

Dalam konfigurasi jaringan, APCu biasanya akan mengungguli memcache dalam hal kecepatan akses, tetapi memcache akan dapat ditingkatkan lebih cepat dan lebih jauh. If you do not expect to have multiple servers running your application, or do not need the extra features that memcached offers then APCu is probably your best choice for object caching

Example logic using APCu

brew unlink php
brew link --overwrite [email protected]
6
sudo port install php74
sudo port install php82
67
sudo port install php74
sudo port install php82
_68 secara eksplisit memberi tahu kami bahwa tidak ada pengembalian;

Dari Sumber

Orang untuk Diikuti

Sulit untuk menemukan anggota komunitas PHP yang menarik dan berpengetahuan ketika Anda pertama kali memulai. Anda dapat menemukan daftar singkat anggota komunitas PHP untuk memulai

Penyedia PHP PaaS

Untuk melihat versi mana yang dijalankan host PaaS ini, buka Versi PHP

Kerangka kerja

Daripada menemukan kembali roda, banyak pengembang PHP menggunakan kerangka kerja untuk membangun aplikasi web. Kerangka kerja mengabstraksikan banyak masalah tingkat rendah dan menyediakan antarmuka yang bermanfaat dan mudah digunakan untuk menyelesaikan tugas-tugas umum

Anda tidak perlu menggunakan kerangka kerja untuk setiap proyek. Kadang-kadang PHP biasa adalah cara yang tepat, tetapi jika Anda memang membutuhkan kerangka kerja, maka ada tiga jenis utama yang tersedia

  • Kerangka Mikro
  • Full-Stack Framework
  • Kerangka Komponen

Mikro-kerangka kerja pada dasarnya adalah pembungkus untuk merutekan permintaan HTTP ke panggilan balik, pengontrol, metode, dll secepat mungkin, dan terkadang dilengkapi dengan beberapa pustaka tambahan untuk membantu pengembangan seperti pembungkus basis data dasar dan sejenisnya. Mereka secara mencolok digunakan untuk membangun layanan HTTP jarak jauh

Banyak kerangka kerja menambahkan banyak fitur di atas apa yang tersedia dalam kerangka kerja mikro; . Ini sering dibundel dengan ORM, paket Otentikasi, dll

Kerangka kerja berbasis komponen adalah kumpulan perpustakaan khusus dan tujuan tunggal. Kerangka kerja berbasis komponen yang berbeda dapat digunakan bersama untuk membuat kerangka kerja mikro atau full-stack

Komponen

Seperti disebutkan di atas "Komponen" adalah pendekatan lain untuk tujuan bersama dalam membuat, mendistribusikan, dan menerapkan kode bersama. Ada berbagai repositori komponen, dua di antaranya adalah

Kedua repositori ini memiliki alat baris perintah yang terkait dengannya untuk membantu proses instalasi dan pemutakhiran, dan telah dijelaskan lebih detail di bagian ini

Ada juga framework berbasis komponen dan vendor komponen yang tidak menawarkan framework sama sekali. Proyek-proyek ini menyediakan sumber paket lain yang idealnya memiliki sedikit atau tidak ada ketergantungan pada paket lain, atau kerangka kerja tertentu

Misalnya, Anda dapat menggunakan paket Validasi FuelPHP, tanpa perlu menggunakan framework FuelPHP itu sendiri

Komponen Illuminate Laravel akan dipisahkan dengan lebih baik dari framework Laravel. Untuk saat ini, hanya komponen terbaik yang dipisahkan dari framework Laravel yang tercantum di atas

Sumber Daya Berguna Lainnya

Lembar contekan

Lebih banyak praktik terbaik

Berita seputar PHP dan komunitas pengembangan web

Anda dapat berlangganan buletin mingguan untuk mendapatkan informasi tentang perpustakaan baru, berita terbaru, acara, dan pengumuman umum, serta sumber daya tambahan yang diterbitkan setiap saat

Ada juga Mingguan di platform lain yang mungkin Anda minati;

alam semesta PHP

Video Tutorial

Saluran YouTube

Video Berbayar

Buku

Ada banyak buku PHP; . Secara khusus, hindari buku tentang "PHP 6", versi yang sekarang tidak akan pernah ada. Rilis besar berikutnya dari PHP setelah 5. 6 adalah "PHP 7", sebagian karena ini

Bagian ini bertujuan untuk menjadi dokumen hidup untuk buku-buku yang direkomendasikan tentang pengembangan PHP secara umum. Jika Anda ingin buku Anda ditambahkan, kirim PR dan akan ditinjau relevansinya

Buku Gratis

Buku Berbayar

  • Bangun API yang Tidak Akan Anda Benci - Semua orang dan anjing mereka menginginkan API, jadi Anda mungkin harus belajar cara membuatnya
  • PHP Modern - Mencakup fitur PHP modern, praktik terbaik, pengujian, penyetelan, penerapan, dan pengaturan lingkungan pengembang
  • Building Secure PHP Apps - Learn the security basics that a senior developer usually acquires over years of experience, all condensed down into one quick and easy handbook
  • Memodernisasi Aplikasi Lama Di PHP - Kendalikan kode Anda dalam serangkaian langkah kecil dan spesifik
  • Mengamankan PHP. Konsep Inti - Panduan untuk beberapa istilah keamanan yang paling umum dan memberikan beberapa contohnya di PHP sehari-hari
  • Scaling PHP - Berhenti bermain sysadmin dan kembali ke coding
  • Pensinyalan PHP - Sinyal PCNLT sangat membantu saat menulis skrip PHP yang dijalankan dari baris perintah
  • Tes Layak Minimum - Penginjil pengujian PHP lama Chris Hartjes membahas apa yang menurutnya adalah minimum yang perlu Anda ketahui untuk memulai
  • Desain Berbasis Domain dalam PHP - Lihat contoh nyata yang ditulis dalam PHP menampilkan Gaya Arsitektur Desain Berbasis Domain (Arsitektur Hexagonal, CQRS atau Sumber Acara), Pola Desain Taktis, dan Integrasi Konteks Terikat

Grup Pengguna PHP

Jika Anda tinggal di kota yang lebih besar, kemungkinan ada grup pengguna PHP di dekatnya. Anda dapat dengan mudah menemukan PUG lokal Anda di PHP. ug. Alternate sources might be Meetup. com atau telusuri

sudo port install php74
sudo port install php82
_70 menggunakan mesin telusur favorit Anda (mis. e. Google). Jika Anda tinggal di kota yang lebih kecil, mungkin tidak ada PUG lokal;

Perhatian khusus harus dibuat dari dua kelompok pengguna global. NomadPHP dan PHPWomen. NomadPHP menawarkan pertemuan grup pengguna online dua kali sebulan dengan presentasi oleh beberapa pembicara top di komunitas PHP. PHPWomen adalah grup pengguna non-eksklusif yang awalnya ditargetkan untuk wanita di dunia PHP. Keanggotaan terbuka untuk semua orang yang mendukung komunitas yang lebih beragam. PHPWomen menyediakan jaringan untuk dukungan, bimbingan dan pendidikan, dan secara umum mempromosikan penciptaan suasana yang “ramah perempuan” dan profesional

Baca tentang Grup Pengguna di Wiki PHP

Konferensi PHP

Komunitas PHP juga menyelenggarakan konferensi regional dan nasional yang lebih besar di banyak negara di seluruh dunia. Anggota terkenal dari komunitas PHP biasanya berbicara di acara yang lebih besar ini, jadi ini kesempatan bagus untuk belajar langsung dari para pemimpin industri

Temukan Konferensi PHP

ElePHPants

ElePHPant adalah maskot cantik dari proyek PHP dengan desain gajah. Ini awalnya dirancang untuk proyek PHP pada tahun 1998 oleh Vincent Pontier - ayah spiritual dari ribuan gajah di seluruh dunia - dan sepuluh tahun kemudian mainan gajah mewah yang menggemaskan lahir juga. Sekarang elePHPants hadir di banyak konferensi PHP dan dengan banyak pengembang PHP di komputer mereka untuk kesenangan dan inspirasi

Mengapa menggunakan PHP dengan SQL?

PHP adalah bahasa skrip sisi server, sehingga menghasilkan halaman dinamis yang signifikan dengan fitur yang disesuaikan. Salah satu manfaat utama menggunakan PHP dan MySQL adalah, ini menyediakan situs web yang interaktif dan mudah digunakan serta memfasilitasi pengunjung untuk berinteraksi secara terbuka sambil menghasilkan konten yang benar-benar dinamis dan fleksibel.

Apakah saya perlu belajar PHP untuk SQL?

Anda harus mempelajari PHP terlebih dahulu karena SQL hanya untuk database , tetapi di PHP Anda dapat mempelajari cara mengirim kueri SQL ke database(Anda dapat mempelajari SQL selama ini) dan . SQL pertama karena ini adalah bahasa perintah untuk berkomunikasi dengan sistem manajemen basis data relasional (akses ms, ms SQL server, oracle, db2 dll. ).

Apakah saya memerlukan PHP untuk MySQL?

PHP dan MySQL adalah 2 teknologi yang berbeda tetapi bekerja sama dengan sangat baik untuk aplikasi dinamis. Tentu saja Anda dapat menjalankan PHP tanpa MySQL tetapi jika Anda ingin menyimpan data, Anda mungkin menginginkan mesin database jika bukan SQLite. Ini juga lebih dari mungkin untuk melewati penggunaan basis data berorientasi SQL apa pun dan sebagai gantinya memanfaatkan.

Apakah SQL berfungsi dengan PHP?

Driver Microsoft untuk PHP untuk SQL Server mengaktifkan integrasi dengan SQL Server untuk aplikasi PHP . Drivernya adalah ekstensi PHP yang memungkinkan pembacaan dan penulisan data SQL Server dari dalam skrip PHP.