Kamis, 12 Februari 2015

PHP ( Personal Home Page )

PHP

 PHP Logo.png
PHP adalah server-side scripting bahasa yang dirancang untuk pengembangan web , tetapi juga digunakan sebagai bahasa pemrograman untuk tujuan umum . Pada Januari 2013 , PHP telah terinstal pada lebih dari 240 juta website (39% dari mereka sampel) dan 2,1 juta server web . [4] Awalnya dibuat oleh Rasmus Lerdorf pada tahun 1994, [5] yang implementasi referensi dari PHP ( didukung oleh Zend mesin .) sekarang diproduksi oleh The PHP Group [6] Sementara PHP awalnya berdiri untuk Personal Home Page, [5] sekarang singkatan PHP: Hypertext Preprocessor, yang merupakan rekursif backronym . [7]
Kode PHP dapat hanya dicampur dengan HTML kode, atau dapat digunakan dalam kombinasi dengan berbagai mesin template dan kerangka web . Kode PHP biasanya diproses oleh PHP interpreter , yang biasanya diimplementasikan sebagai pribumi web server module atau Common Gateway Interface (CGI) executable. Setelah kode PHP ditafsirkan dan dilaksanakan, server web mengirimkan dihasilkan output ke klien, biasanya dalam bentuk bagian dari halaman web yang dihasilkan; misalnya, kode PHP dapat menghasilkan halaman Web kode HTML, gambar, atau data lainnya. PHP juga telah berkembang untuk menyertakan antarmuka baris perintah (CLI) kemampuan dan dapat digunakan dalam standalone aplikasi grafis . [8]
Interpreter PHP kanonik, didukung oleh Zend Engine, adalah perangkat lunak bebas yang dirilis di bawah Lisensi PHP . PHP telah banyak porting dan dapat digunakan pada kebanyakan server web pada hampir setiap sistem operasi dan platform yang , secara gratis. [9]
Meskipun popularitasnya, ada tertulis spesifikasi atau standar yang ada untuk bahasa PHP hingga 2014, meninggalkan PHP interpreter kanonik sebagai de facto standar. Sejak 2014, ada pekerjaan yang sedang berlangsung pada menciptakan spesifikasi PHP formal

Sejarah

Rasmus Lerdorf , yang menulis asli Common Gateway Interface komponen (CGI), bersama-sama dengan Andi Gutmans dan Zeev Suraski , yang menulis ulang parser yang terbentuk PHP 3.
Pengembangan PHP dimulai pada tahun 1994 ketika Rasmus Lerdorf menulis serangkaian Common Gateway Interface (CGI) binari di C, [6] [11] [12] [13] yang digunakan untuk mempertahankan nya homepage pribadi . Dia diperpanjang mereka untuk menambahkan kemampuan untuk bekerja dengan bentuk web dan untuk berkomunikasi dengan database , dan disebut implementasi ini "Personal Home Page / Forms Interpreter" atau PHP / FI.
PHP / FI dapat digunakan untuk membangun sederhana, dinamis aplikasi web . Lerdorf awalnya mengumumkan rilis PHP / FI sebagai "Personal Home Page Tools (PHP Tools) versi 1.0" publik untuk mempercepat bug lokasi dan meningkatkan kode, di Usenet kelompok diskusi comp.infosystems.www.authoring.cgi pada tanggal 8 Juni, 1995. [14] [15] Rilis ini sudah memiliki fungsi dasar yang PHP memiliki seperti tahun 2013 . Ini termasuk variabel Perl seperti, bentuk penanganan, dan kemampuan untuk menanamkan HTML. The sintaks mirip bahwa dari Perl tapi lebih sederhana, lebih terbatas dan kurang konsisten. [6]
PHP awal tidak dimaksudkan untuk menjadi bahasa pemrograman baru, dan tumbuh secara organik, dengan Lerdorf mencatat dalam retrospeksi: "Saya tidak tahu bagaimana menghentikannya, tidak pernah ada niat untuk menulis bahasa pemrograman [...] Aku benar-benar tidak tahu bagaimana untuk menulis bahasa pemrograman, saya hanya terus menambahkan langkah logis berikutnya dalam perjalanan. " [16] Sebuah tim pengembangan mulai terbentuk dan, setelah berbulan-bulan bekerja dan beta testing, resmi dirilis PHP / FI 2 November 1997.
Salah satu kritik dari PHP adalah bahwa hal itu tidak awalnya dirancang, tapi bukan itu dikembangkan secara organik; [16] . antara lain, hal ini telah menyebabkan penamaan tidak konsisten fungsi dan pemesanan konsisten parameter mereka [17] Dalam beberapa kasus, fungsi Nama-nama yang dipilih untuk mencocokkan perpustakaan tingkat rendah yang PHP adalah "pembungkus", [18] sementara dalam beberapa versi yang sangat awal PHP panjang nama fungsi digunakan secara internal sebagai fungsi hash , sehingga nama-nama yang dipilih untuk meningkatkan distribusi nilai-nilai hash. [19]
Zeev Suraski dan Andi Gutmans menulis ulang parser pada tahun 1997 dan membentuk dasar dari PHP 3, mengubah nama bahasa terhadap rekursif akronim PHP:. Hypertext Preprocessor [6] Setelah itu, uji publik dari PHP 3 dimulai, dan peluncuran resmi datang pada bulan Juni 1998. Suraski dan Gutmans kemudian mulai baru menulis ulang inti PHP, menghasilkan Zend mesin pada tahun 1999. [20] Mereka juga mendirikan Zend Technologies di Ramat Gan , Israel. [6]
Pada tanggal 22 Mei 2000, PHP 4, didukung oleh Zend Engine 1.0, dirilis. [6] Pada Agustus 2008 cabang ini mencapai versi 4.4.9. PHP 4 tidak lagi dalam pengembangan dan tidak akan update keamanan akan dirilis. [21] [22]
Pada tanggal 13 Juli 2004, PHP 5 dirilis, didukung oleh Zend baru mesin II. [6] PHP 5 termasuk fitur baru seperti meningkatkan dukungan untuk pemrograman berorientasi objek , yang PHP Data Objects (PDO) ekstensi (yang mendefinisikan ringan dan antarmuka yang konsisten untuk mengakses database), dan berbagai peningkatan kinerja. [23] Pada tahun 2008 PHP 5 menjadi satu-satunya versi stabil dalam pengembangan. Akhir statis mengikat telah hilang dari PHP dan telah ditambahkan di versi 5.3. [24] [25]
Banyak profil tinggi proyek open-source berhenti mendukung PHP 4 dalam kode baru tanggal 5 Februari 2008, karena inisiatif GoPHP5, [26] yang disediakan oleh konsorsium pengembang PHP mempromosikan transisi dari PHP 4 ke PHP 5. [ 27] [28]
Seiring waktu, juru PHP menjadi tersedia di sebagian besar ada 32-bit dan 64-bit sistem operasi, baik dengan membangun mereka dari kode sumber PHP, atau dengan menggunakan binari pre-built. [29] Untuk versi PHP 5.3 dan 5.4, yang hanya tersedia Microsoft Windows distribusi biner adalah 32-bit x86 membangun, [30] [31] yang membutuhkan modus kompatibilitas Windows 32-bit saat menggunakan Internet Information Services (IIS) pada platform Windows 64-bit. PHP versi 5.5 membuat 64-bit x86-64 membangun tersedia untuk Microsoft Windows. [32]

PHP 6 dan Unicode

PHP mendapat tinjauan yang beragam karena kurang asli Unicode dukungan di tingkat bahasa inti. [33] [34] Pada tahun 2005, sebuah proyek yang dipimpin oleh Andrei Zmievski dimulai untuk membawa dukungan Unicode asli seluruh PHP, dengan embedding Komponen Internasional untuk Unicode (ICU ) perpustakaan, dan mewakili string teks sebagai UTF-16 internal. [35] Karena ini akan menyebabkan perubahan besar baik ke internal bahasa dan kode pengguna, direncanakan untuk rilis ini sebagai versi 6.0 dari bahasa, bersama dengan lainnya Fitur utama maka dalam pembangunan. [36]
Namun, kekurangan pengembang yang memahami perubahan yang diperlukan, dan masalah kinerja yang timbul akibat konversi ke dan dari UTF-16, yang jarang digunakan dalam konteks web, menyebabkan keterlambatan proyek. [37] Akibatnya, PHP 5.3 rilis diciptakan pada tahun 2009, dengan banyak non-Unicode fitur back-porting dari PHP 6, terutama ruang nama. Pada bulan Maret 2010, proyek dalam bentuk yang sekarang secara resmi ditinggalkan, dan rilis PHP 5.4 disiapkan mengandung paling tersisa non-Unicode fitur dari PHP 6, seperti sifat dan penutupan kembali mengikat. [38] harapan awal adalah bahwa baru Rencana akan dibentuk untuk integrasi Unicode, tetapi sebagai 2014 tidak ada telah diadopsi.

PHP 7

Pada 2014 , pekerjaan sedang berlangsung pada versi PHP utama baru bernama PHP 7. Ada beberapa perdebatan mengenai apakah versi utama berikutnya dari PHP adalah disebut PHP 6 atau PHP 7. Sementara percobaan PHP 6 unicode memiliki pernah dirilis, sejumlah artikel dan judul buku referensi tua PHP 6 nama, yang mungkin menyebabkan kebingungan jika rilis baru adalah untuk menggunakan kembali PHP 6 nama. [39] Setelah pemungutan suara, nama PHP 7 dipilih. [ 40]
PHP 7 mendapat fondasinya dari PHP eksperimental cabang yang awalnya bernama phpng (PHP generasi berikutnya), yang bertujuan untuk mengoptimalkan kinerja PHP dengan refactoring Zend Engine sementara tetap mempertahankan kompatibilitas bahasa dekat-lengkap. [41] Pada 14 Juli 2014 , WordPress benchmark berbasis, yang berfungsi sebagai patokan Suite utama untuk proyek phpng, menunjukkan peningkatan hampir 100% dalam kinerja. Perubahan dari phpng juga diharapkan untuk membuatnya lebih mudah untuk meningkatkan kinerja di masa depan, karena struktur data yang lebih kompak dan perubahan lain dilihat sebagai lebih cocok untuk migrasi sukses untuk just-in-time (JIT) compiler. [42] Karena perubahan yang signifikan, ini ulang Zend Engine akan disebut Zend Engine 3, berhasil Zend Engine 2 yang digunakan dalam PHP 5. [43]
Dalam hal fitur bahasa baru, PHP 7 akan menambahkan fitur seperti jenis kembali deklarasi, [44] yang akan melengkapi yang sudah ada jenis parameter deklarasi tersebut. PHP 7 juga akan berisi sintaks variabel perbaikan yang secara internal konsisten dan lengkap, menyelesaikan masalah lama di PHP, apa yang akan memungkinkan penggunaan -> , [] , () , {} , dan :: operator dengan kiri berarti sewenang-wenang ekspresi -Hand-side. [45]

Sejarah rilis

Kunci
Warna Makna Pembangunan
Warna Merah Rilis tua Tidak ada pembangunan
Warna Kuning Rilis stabil Perbaikan keamanan
Hijau Rilis stabil Bug dan perbaikan keamanan
Warna Biru Masa mendatang Fitur baru
Versi Tanggal rilis Didukung sampai [46] Catatan
1.0 8 Juni 1995
Secara resmi disebut "Personal Home Page Tools (PHP Tools)". Ini adalah penggunaan pertama dari nama "PHP". [6]
2.0 1 November 1997
Secara resmi disebut "PHP / FI 2.0". Ini adalah rilis pertama yang benar-benar bisa dicirikan sebagai PHP, menjadi bahasa mandiri dengan banyak fitur yang telah bertahan sampai hari ini.
3.0 6 Juni 1998 20 Oktober 2000 Pengembangan bergerak dari satu orang ke beberapa pengembang. Zeev Suraski dan Andi Gutmans menulis ulang dasar untuk versi ini. [6]
4.0 22 Mei 2000 23 Juni 2001 Ditambahkan lebih maju mengurai dua tahap / mengeksekusi sistem tag-parsing disebut mesin Zend. [47]
4.1 10 Desember 2001 12 Maret 2002 Diperkenalkan 'superglobals' ( $_GET , $_POST , $_SESSION , dll) [47]
4.2 22 April 2002 6 September 2002 Dinonaktifkan register_globals secara default. Data yang diterima melalui jaringan tidak dimasukkan langsung ke dalam dunia namespace lagi, menutup lubang keamanan mungkin dalam aplikasi. [47]
4.3 27 Desember 2002 31 Maret 2005 Memperkenalkan antarmuka baris perintah (CLI), untuk melengkapi CGI. [47] [48]
4.4 11 Juli 2005 7 Agustus 2008 Fixed bug korupsi memori, yang diperlukan melanggar kompatibilitas biner dengan ekstensi dikompilasi terhadap versi PHP 4.3.x. [49]
5.0 13 Juli 2004 5 September 2005 Zend Mesin II dengan model objek baru. [50]
5.1 24 November 2005 24 Agustus 2006 Peningkatan kinerja dengan pengenalan variabel compiler di re-engineered PHP mesin. [50] Ditambahkan PHP Data Objects (PDO) sebagai antarmuka yang konsisten untuk mengakses database. [51]
5.2 2 Nov 2006 6 Januari 2011 Memungkinkan perpanjangan saringan secara default. Asli JSON dukungan. [50]
5.3 30 Juni 2009 14 Agustus 2014 Namespace dukungan; akhir binding statis , melompat label (terbatas goto ), penutupan , arsip PHP (Phar), pengumpulan sampah untuk referensi melingkar, meningkatkan Windows dukungan, sqlite3, mysqlnd sebagai pengganti libmysql sebagai perpustakaan yang mendasari untuk ekstensi yang bekerja dengan MySQL , Fileinfo sebagai pengganti mime_magic untuk lebih baik MIME dukungan, ekstensi Internasionalisasi, dan depresiasi ekstensi ereg.
5.4 1 Maret 2012 September 2015 [52] Sifat dukungan, dukungan sintaks array singkat. Dihapusitems: register_globals , safe_mode , allow_call_time_pass_reference , session_register() , session_unregister() and session_is_registered() . Web server built-in. [53] Beberapa perbaikan fitur yang ada, kinerja dan persyaratan memori berkurang.
5.5 20 Juni 2013 Juni 2016 [54] Dukungan untuk generator , finally blok untuk pengecualian penanganan, OpCache (berdasarkan Zend Optimizer +) dibundel dalam distribusi resmi. [55]
5.6 28 Agustus 2014 Agustus 2017 [54] Ekspresi konstan skalar, fungsi variadic , argumen membongkar, operator eksponensial baru, perpanjangan pernyataan penggunaan untuk fungsi dan konstanta, phpdbg debugger baru sebagai modul SAPI, dan perbaikan kecil lainnya. [56]
7.0 Mid Oktober 2015 [57] Mid Oktober 2018 [54] Zend Engine 3 (peningkatan kinerja [42] dan 64-bit dukungan bulat pada Windows [58] ), sintaks variabel seragam, [45] AST proses kompilasi berbasis, [59] menambahkan Closure::call() , [60] bitwise pergeseran konsistensi di seluruh platform, [61] ?? ( nol menyatu ) operator, [62] Unicode codepoint melarikan diri sintaks , [63] dan kembali deklarasi tipe. [44]
Dimulai pada tanggal 28 Juni 2011, PHP Group mulai mengikuti jadwal ketika versi baru dari PHP akan dirilis. [54] Di bawah garis waktu ini, setidaknya satu rilis harus dilakukan setiap bulan. Sekali per tahun, rilis minor harus terjadi yang dapat mencakup fitur baru. Setiap rilis minor setidaknya harus memiliki dua tahun keamanan dan perbaikan bug, diikuti oleh setidaknya satu tahun perbaikan hanya keamanan, untuk total proses rilis tiga tahun untuk setiap rilis minor. Tidak ada fitur baru (kecuali kecil dan mandiri) akan diperkenalkan ke dalam rilis minor selama proses rilis tiga tahun.

Maskot

Maskot dari proyek PHP adalah elePHPant, biru gajah dengan PHP logo pada sisinya, dirancang oleh Vincent Pontier. [64] The elePHPant kadang-kadang berbeda warna ketika di mainan mewah bentuk.

Sintaks

Artikel utama: sintaks PHP dan semantik
Berikut Hello world ditulis dalam kode PHP tertanam dalam HTML dokumen:
 <! DOCTYPE html>
 <Html>
     <Head>
         <Title> PHP Uji </ title>
     </ Head>
     <Body>
         <? Php echo '<p> Hello World </ p>';?>
     </ Body>
 </ Html>
Namun, seperti PHP tidak perlu tertanam dalam HTML atau digunakan dengan server web, versi sederhana dari program Hello World dapat ditulis seperti ini, dengan tag penutup dihilangkan sebagai pilihan dalam file yang berisi kode PHP murni [65] ( PHP sebelum 5.4.0, sintaks singkat untuk echo () hanya bekerja dengan pengaturan konfigurasi short_open_tag diaktifkan, sedangkan untuk PHP 5.4.0 dan kemudian selalu tersedia): [66] [67] [68]
 ? <= 'Halo dunia';
PHP interpreter hanya mengeksekusi kode PHP dalam nya pembatas . Apapun di luar pembatas yang tidak diproses oleh PHP (meskipun teks non-PHP masih tunduk mengontrol struktur yang dijelaskan dalam kode PHP). Pembatas yang paling umum adalah <?php untuk membuka dan ?> untuk menutup bagian PHP. <script language="php"> dan </script> pembatas juga tersedia, seperti bentuk singkat <? atau <?= (yang digunakan untuk echo kembali tali atau variabel ) dan ?> serta ASP bentuk pendek-gaya <% atau <%= dan %> . Pembatas pendek membuat file naskah kurang portable, karena dukungan bagi mereka dapat dinonaktifkan dalam konfigurasi PHP lokal, dan karena itu mereka tidak dianjurkan. [68] [69] Tujuan dari semua pembatas ini adalah untuk memisahkan kode PHP dari kode non-PHP, termasuk HTML. [70]
Bentuk pertama pembatas, <?php dan ?> , di XHTML dan lainnya XML dokumen, menciptakan benar dibentuk XML "pemrosesan instruksi". [71] Ini berarti bahwa campuran yang dihasilkan dari kode PHP dan markup lainnya dalam file server-side adalah dirinya sendiri well-formed XML.
Variabel diawali dengan simbol dolar , dan jenis tidak perlu ditentukan terlebih dahulu. PHP 5 memperkenalkan jenis mengisyaratkan yang memungkinkan fungsi untuk memaksa mereka untuk menjadi parameter objek dari kelas tertentu, array, interface atau fungsi callback . Namun, jenis petunjuk tidak dapat digunakan dengan jenis skalar seperti integer atau string. [72]
Tidak seperti fungsi dan kelas nama, nama variabel adalah case sensitif. Kedua ganda dikutip ( "" ) dan heredoc string memberikan kemampuan untuk interpolasi nilai variabel ke dalam string. [73] PHP memperlakukan baris sebagai spasi dengan cara dari bahasa-bentuk bebas , dan pernyataan yang diakhiri dengan titik koma. [ 74] PHP memiliki tiga jenis komentar sintaks : /* */ tanda blok dan komentar inline; // serta # . digunakan untuk komentar satu baris [75] Pernyataan gema adalah salah satu dari beberapa fasilitas PHP menyediakan teks keluaran , misalnya, untuk browser web.
Dalam hal kata kunci dan sintaks bahasa, PHP mirip dengan kebanyakan bahasa tingkat tinggi yang mengikuti sintaks C gaya. if kondisi, for dan while loop, dan kembali fungsi yang mirip dengan sintaks bahasa seperti C, C ++, C #, Java dan perl.

Tipe data

Toko PHP bilangan bulat dalam berbagai tergantung platform, baik 64-bit atau 32-bit ditandatangani bilangan bulat setara dengan C-bahasa tipe lama . Unsigned integer dikonversi ke nilai yang ditandatangani dalam situasi tertentu; Perilaku ini berbeda dengan bahasa pemrograman lain. [76] variabel Integer dapat diberikan dengan menggunakan desimal (positif dan negatif), oktal , heksadesimal , dan biner notasi.
Floating point nomor juga disimpan dalam berbagai platform tertentu. Mereka dapat ditentukan dengan menggunakan notasi floating point, atau dua bentuk notasi ilmiah . [77] PHP memiliki native Boolean tipe yang mirip dengan jenis Boolean asli di Jawa dan C ++ . Menggunakan jenis Boolean aturan konversi, nilai-nilai non-nol ditafsirkan sebagai benar dan nol sebagai palsu, seperti di Perl dan C ++. [77]
Tipe data nol merupakan variabel yang tidak memiliki nilai,. NULL adalah satu-satunya nilai yang diperbolehkan untuk tipe data ini [77]
Variabel dari "sumber daya" jenis merupakan referensi ke sumber daya dari sumber eksternal. Ini biasanya dibuat oleh fungsi dari ekstensi tertentu, dan hanya dapat diproses oleh fungsi dari ekstensi yang sama; contoh termasuk berkas, gambar, dan sumber daya database. [77]
Array dapat mengandung unsur setiap jenis yang PHP dapat menangani, termasuk sumber daya, objek, dan bahkan array lainnya. Order diawetkan dalam daftar nilai-nilai dan hash dengan kedua kunci dan nilai-nilai, dan dua dapat bercampur. [77] PHP juga mendukung string , yang dapat digunakan dengan tanda kutip tunggal, tanda kutip ganda, nowdoc atau heredoc sintaks. [78]
Standar PHP Perpustakaan (SPL) mencoba untuk memecahkan masalah standar dan mengimplementasikan efisien antarmuka akses data dan kelas. [79]

Fungsi

PHP memiliki ratusan fungsi yang disediakan oleh fungsi bahasa inti dan ribuan lainnya tersedia melalui berbagai ekstensi; fungsi-fungsi ini didokumentasikan dalam dokumentasi PHP secara online. [80] Namun, built-in perpustakaan memiliki berbagai konvensi penamaan dan inkonsistensi terkait, seperti yang dijelaskan di bawah sejarah di atas.
Fungsi tambahan dapat didefinisikan oleh pengembang:
 Fungsi myAge ($ birthYear) // mendefinisikan fungsi, yang satu ini diberi nama "myAge"
 {
     $ Acara santai dan bepergian = date ('Y') - $ birthYear; // menghitung usia
     kembali $ acara santai dan bepergian. "  '($ acara santai dan bepergian = 1!?.' s ':' ') tahun; // mengembalikan usia dalam bentuk deskriptif
 }
 
 gema 'Saat ini saya'.  myAge (1981). "  tua ';. // output teks bersambung
                                                                  // Dengan nilai kembalinya myAge ()
 // Sebagai hasil dari sintaks ini, myAge () dipanggil.
 // Pada tahun 2014, output dari contoh program ini akan 'Saat ini saya berusia 33 tahun. "
Dalam PHP, fungsi normal tidak kelas dan hanya dapat direferensikan oleh nama mereka secara langsung, atau secara dinamis dengan variabel yang berisi nama fungsi (disebut sebagai "fungsi variabel"). Fungsi User-defined dapat dibuat setiap saat tanpa prototyped . [80] [81] Fungsi dapat didefinisikan dalam blok kode, memungkinkan keputusan run-time , apakah atau tidak fungsi harus didefinisikan. Fungsi panggilan harus menggunakan tanda kurung, dengan pengecualian dari nol-argumen kelas konstruktor fungsi yang disebut dengan PHP new operator, di mana kurung adalah opsional.
Sampai PHP 5.3, dukungan untuk benar fungsi anonim atau penutupan tidak ada di PHP. Sementara create_function() ada sejak PHP 4.0.1, itu hanyalah pembungkus tipis sekitar eval() yang memungkinkan fungsi PHP yang normal yang akan dibuat selama pelaksanaan program. [82] Juga, dukungan untuk fungsi-fungsi variabel memungkinkan fungsi normal PHP yang akan digunakan, misalnya, sebagai callback atau dalam tabel fungsi . [81] PHP 5.3 menambahkan dukungan untuk penutupan, yaitu fungsi anonim, kelas pertama benar, [83] yang sintaks dapat dilihat dalam contoh berikut:
 Fungsi getAdder ($ x)
 {
     function ($ y) kembali menggunakan ($ x)
     {
         return $ x + $ y;
     };
 }
 
 $ Penambah = getAdder (8);
 echo $ penambah (2); // prints "10"
Dalam contoh di atas, getAdder() function menciptakan penutupan menggunakan melewati argumen $x (kata kunci use mengimpor variabel dari konteks leksikal), yang mengambil tambahan argumen $y , dan mengembalikan penutupan diciptakan untuk pemanggil. Fungsi tersebut adalah suatu objek kelas, yang berarti bahwa hal itu dapat disimpan dalam variabel, lulus sebagai parameter untuk fungsi lainnya, dll [84]
The goto pernyataan kontrol aliran digunakan seperti dalam contoh berikut:
 kunci function ()
 {
     $ File = fopen ('file.txt', 'r +');
 
 coba lagi:
     if (kawanan ($ file, LOCK_EX |! LOCK_NB))
         goto coba lagi;
 
     fwrite ($ file, "Sukses!");
     fclose ($ file);
 }
Ketika flock() dipanggil, PHP membuka file dan mencoba untuk menguncinya. Label Target retry: mendefinisikan titik yang eksekusi harus kembali jika flock() tidak berhasil dan goto retry; disebut. The goto Pernyataan dibatasi dan mengharuskan label sasaran berada di file yang sama dan konteks.
The goto Pernyataan telah didukung sejak PHP 5.3.

Benda

Dasar pemrograman berorientasi fungsi ditambahkan pada PHP 3 dan ditingkatkan dalam PHP 4. [6] penanganan Obyek benar-benar ditulis ulang untuk PHP 5, memperluas set fitur dan meningkatkan kinerja. [85] Dalam versi sebelumnya dari PHP, benda ditangani seperti jenis nilai . [85] Kelemahan dari metode ini adalah bahwa seluruh objek disalin ketika variabel ditugaskan atau disahkan sebagai parameter untuk sebuah metode. Dalam pendekatan baru, objek yang direferensikan oleh pegangan , dan bukan oleh nilai.
PHP 5 memperkenalkan pribadi dan dilindungi anggota variabel dan metode, bersama dengan kelas abstrak , kelas akhir , metode abstrak , dan metode akhir . Hal ini juga memperkenalkan cara standar menyatakan konstruktor dan destructors , mirip dengan bahasa berorientasi objek seperti C ++ , dan standar penanganan eksepsi Model. Selain itu, PHP 5 menambahkan interface dan memungkinkan untuk beberapa interface yang akan dilaksanakan. Ada antarmuka khusus yang memungkinkan objek untuk berinteraksi dengan sistem runtime. Objects menerapkan ArrayAccess dapat digunakan dengan berbagai sintaks dan obyek yang mengimplementasikan Iterator atau IteratorAggregate dapat digunakan dengan foreach konstruksi bahasa . Tidak ada meja virtual fitur dalam mesin, sehingga variabel statis terikat dengan nama bukan referensi pada waktu kompilasi. [86]
Jika pengembang membuat copy dari suatu obyek dengan menggunakan kata reserved clone , mesin Zend akan memeriksa apakah __clone() metode telah ditetapkan. Jika tidak, ia akan memanggil default __clone() yang akan menyalin sifat objek. Jika __clone() metode didefinisikan, maka akan bertanggung jawab untuk menetapkan sifat-sifat yang diperlukan dalam objek yang diciptakan. Untuk kenyamanan, mesin akan menyediakan fungsi yang impor properti dari objek sumber, sehingga pemrogram dapat memulai dengan dengan nilai replika dari objek sumber dan hanya sifat menimpa yang perlu diubah. [87]
Berikut ini adalah contoh dasar pemrograman berorientasi objek dalam PHP:
 class Person
 {
     publik $ firstName;
     publik $ NamaBelakang;
 
     Fungsi __construct publik ($ firstName, $ NamaBelakang = '') {// opsional argumen kedua
         $ Ini -> firstName = $ firstName;
         $ Ini -> NamaBelakang = $ NamaBelakang;
     }
 
     fungsi publik greet () {
         kembali 'Halo, nama saya' $ ini -.> firstName.
                (! ($ This -> NamaBelakang = '') (? '' $ This -> NamaBelakang):. '').. '';
     }
 
     Fungsi public static staticGreet ($ firstName, $ NamaBelakang) {
         kembali 'Halo, nama saya'. $ firstName. "  '. $ NamaBelakang.' '.;
     }
 }
 
 $ Dia = new Person ('John', 'Smith');
 $ Dia = new Person ('Sally', 'Davis');
 $ Lainnya = new Person ('iAmine');
 
 gema $ dia -> menyapa (); // prints "Halo, nama saya John Smith."
 echo '<br />';
 
 gema $ dia -> menyapa (); // prints "Halo, nama saya adalah Sally Davis."
 echo '<br />';
 
 echo $ lainnya -> menyapa (); ". Halo, nama saya iAmine" // prints
 echo '<br />';
 
 gema Orang :: staticGreet ('Jane', 'Doe'); // prints "Halo, nama saya Jane Doe."
The visibilitas properti PHP dan metode didefinisikan dengan menggunakan kata kunci public , private , dan protected . Standarnya adalah publik, jika hanya var digunakan; var adalah sinonim untuk public . Item dinyatakan public dapat diakses di mana-mana. protected membatasi akses ke kelas mewarisi (dan kelas yang mendefinisikan item). private batas visibilitas hanya untuk kelas yang mendefinisikan item. [88] Objek dari jenis yang sama memiliki akses ke masing-masing yang lain anggota pribadi dan dilindungi meskipun mereka tidak contoh yang sama. Fitur visibilitas anggota PHP ini telah kadang-kadang digambarkan sebagai "sangat berguna." [89] Namun, mereka juga kadang-kadang digambarkan sebagai "yang terbaik tidak relevan dan paling buruk positif berbahaya." [90]

Implementasi

Asli, hanya lengkap dan paling banyak digunakan implementasi PHP didukung oleh Zend Mesin dan hanya dikenal sebagai PHP. Untuk disambiguate dari implementasi lain, kadang-kadang secara tidak resmi disebut sebagai "Zend PHP". Zend Engine mengkompilasi PHP source code on-the-fly menjadi format internal yang dapat mengeksekusi, sehingga ia bekerja sebagai penerjemah . [91] [92] Hal ini juga "implementasi referensi" dari PHP, PHP tidak resmi spesifikasi, dan semantik Zend PHP mendefinisikan semantik PHP itu sendiri. Karena semantik kompleks dan bernuansa PHP, ditentukan oleh bagaimana Zend bekerja, sulit untuk bersaing implementasi untuk menawarkan kompatibilitas lengkap.
PHP single-request-per-naskah-eksekusi model, dan fakta Zend Engine adalah penerjemah, menyebabkan inefisiensi. Akibatnya, berbagai produk telah dikembangkan untuk membantu meningkatkan kinerja PHP. Dalam rangka untuk mempercepat waktu pelaksanaan dan tidak perlu mengkompilasi kode sumber PHP setiap kali halaman web diakses, script PHP juga dapat digunakan dalam format internal mesin PHP dengan menggunakan opcode cache, yang bekerja dengan caching bentuk dikompilasi dari script PHP (opcodes) dalam memori bersama untuk menghindari overhead parsing dan kompilasi kode setiap kali script berjalan. Opcode cache, Zend Opcache , dibangun ke PHP sejak versi 5.5. [93] Contoh lain dari opcode cache yang banyak digunakan adalah Alternatif PHP Cache (APC), yang tersedia sebagai PECL ekstensi. [94]
Sementara Zend PHP masih implementasi yang paling populer, beberapa implementasi lainnya telah dikembangkan. Beberapa di antaranya adalah compiler atau dukungan kompilasi JIT , dan karenanya menawarkan manfaat kinerja lebih Zend PHP dengan mengorbankan kurang kompatibilitas PHP penuh. Implementasi alternatif adalah sebagai berikut:
  • HipHop Virtual Machine (HHVM) - dikembangkan di Facebook dan tersedia sebagai open source, itu mengkonversi kode PHP ke dalam bytecode tingkat tinggi (umumnya dikenal sebagai bahasa perantara ), yang kemudian diterjemahkan ke dalam kode mesin x86-64 dinamis pada saat runtime oleh just-in-time (JIT) compiler, sehingga sampai dengan 6 × peningkatan kinerja. [95]
  • Burung beo - mesin virtual yang dirancang untuk menjalankan bahasa dinamis secara efisien; Pipp mengubah kode sumber PHP ke burung beo representasi menengah , yang kemudian diterjemahkan ke dalam bytecode burung beo dan dieksekusi oleh mesin virtual.
  • Phalanger - mengkompilasi PHP ke Common Intermediate Language (CIL) bytecode
  • HipHop - dikembangkan di Facebook dan tersedia sebagai open source, itu mengubah script PHP ke C ++ kode dan kemudian mengkompilasi kode yang dihasilkan, mengurangi beban server hingga 50%. Pada awal 2013, Facebook usang dalam mendukung HHVM karena beberapa alasan, termasuk kesulitan penyebaran dan kurangnya dukungan untuk seluruh bahasa PHP, termasuk create_function () dan eval () konstruksi. [96]

Perizinan

PHP adalah perangkat lunak bebas yang dirilis di bawah Lisensi PHP , yang menyatakan bahwa: [97]
Produk yang berasal dari software ini tidak dapat disebut "PHP", atau mungkin "PHP" muncul dalam nama mereka, tanpa izin tertulis dari group@php.net. Anda mungkin menunjukkan bahwa perangkat lunak Anda bekerja sama dengan PHP dengan mengatakan " Foo untuk PHP "bukan menyebutnya" PHP Foo "atau" phpfoo ".
Pembatasan ini pada penggunaan nama PHP membuat Lisensi PHP sesuai dengan GNU General Public License (GPL), sedangkan Lisensi Zend tidak kompatibel karena klausul iklan mirip dengan lisensi asli dari BSD. [98]

Pengembangan dan masyarakat

PHP mencakup berbagai gratis dan open-source perpustakaan dalam distribusi sumbernya, atau menggunakan mereka dalam menghasilkan biner PHP membangun. PHP pada dasarnya merupakan Internet sistem -aware dengan built-in modul untuk mengakses File Transfer Protocol (FTP) server dan banyak server database, termasuk PostgreSQL , MySQL , Microsoft SQL Server dan SQLite (yang merupakan database tertanam), LDAP server, dan lain-lain . Banyak fungsi akrab bagi programmer C, seperti yang di stdio keluarga, tersedia dalam PHP standar membangun. [99]
PHP memungkinkan pengembang untuk menulis ekstensi di C untuk menambahkan fungsionalitas ke bahasa PHP. Ekstensi PHP dapat dikompilasi secara statis ke PHP atau dimuat secara dinamis pada saat runtime. Banyak ekstensi telah ditulis untuk menambahkan dukungan untuk Windows API , manajemen proses pada Unix-seperti sistem operasi , string multibyte ( Unicode ), Curl , dan beberapa yang populer format kompresi . Fitur PHP lainnya dibuat tersedia melalui ekstensi termasuk integrasi dengan IRC , generasi dinamis gambar dan Adobe Flash konten, PHP Data Objects (PDO) sebagai lapisan abstraksi yang digunakan untuk mengakses database, [100] [101] [102] [103] [104 ] [105] [106] dan bahkan sintesis pidato . Beberapa fungsi inti bahasa, seperti yang berhubungan dengan string dan array, juga diimplementasikan sebagai ekstensi. [107] The PHP Perpustakaan Komunitas Ekstensi (PECL) proyek adalah repositori untuk ekstensi untuk bahasa PHP. [108]
Beberapa proyek lainnya, seperti Zephir, memberikan kemampuan untuk ekstensi PHP yang akan dibuat dalam bahasa tingkat tinggi dan dikompilasi ke dalam ekstensi PHP asli. Pendekatan seperti, alih-alih menulis ekstensi PHP langsung dalam C, menyederhanakan pengembangan ekstensi dan mengurangi waktu yang dibutuhkan untuk pemrograman dan pengujian. [109]
Zend Technologies menyediakan sertifikasi ujian bagi programmer untuk menjadi pengembang PHP bersertifikat.

Instalasi dan konfigurasi

Ada dua cara utama untuk menambahkan dukungan untuk PHP ke server web - sebagai modul web server yang asli, atau sebagai executable CGI. PHP memiliki antarmuka modul langsung disebut Server Application Programming Interface (SAPI), yang didukung oleh banyak server web termasuk Apache HTTP Server , Microsoft IIS , Netscape (sekarang mati) dan iPlanet . Beberapa server web lainnya, seperti OmniHTTPd, mendukung Internet Server Application Programming Interface (ISAPI), yang merupakan Microsoft 's antarmuka modul server web. Jika PHP tidak memiliki dukungan modul untuk server web, dapat selalu digunakan sebagai Common Gateway Interface (CGI) atau FastCGI prosesor; dalam hal ini, web server dikonfigurasi untuk menggunakan PHP CGI executable untuk memproses semua permintaan untuk file PHP. [110]
PHP-FPM (FastCGI Process Manager) merupakan implementasi FastCGI alternatif untuk PHP, dibundel dengan distribusi PHP resmi sejak versi 5.3.3. [111] Jika dibandingkan dengan pelaksanaan FastCGI tua, berisi beberapa fitur tambahan, sebagian besar berguna untuk berat dimuat server web. [112]
Bila menggunakan PHP untuk baris perintah scripting, PHP antarmuka baris perintah (CLI) dieksekusi diperlukan. PHP mendukung CLI SAPI sebagai PHP 4.3.0. [113] Fokus utama SAPI ini sedang mengembangkan shell aplikasi yang menggunakan PHP. Ada beberapa perbedaan antara CLI SAPI dan SAPIs lainnya, meskipun mereka berbagi banyak perilaku yang sama. [114]
PHP juga dapat digunakan untuk menulis dekstop antarmuka pengguna grafis (GUI) aplikasi, dengan menggunakan PHP-GTK ekstensi. PHP-GTK tidak termasuk dalam distribusi PHP resmi, [110] dan sebagai perpanjangan dapat digunakan hanya dengan PHP versi 5.1.0 dan yang lebih baru. Cara yang paling umum untuk menginstal PHP-GTK adalah kompilasi dari kode sumber. [115]
Ketika PHP diinstal dan digunakan dalam awan lingkungan, kit pengembangan perangkat lunak (SDK) yang disediakan untuk menggunakan fitur-awan tertentu. Sebagai contoh:
Banyak pilihan konfigurasi yang didukung, yang mempengaruhi kedua fitur PHP inti dan ekstensi. [118] [119] Konfigurasi file php.ini dicari di lokasi yang berbeda, tergantung pada cara PHP digunakan. [120] File konfigurasi dibagi menjadi berbagai bagian, [121] sementara beberapa opsi konfigurasi dapat juga diatur dalam konfigurasi server web. [122]

Gunakan

Sebuah gambaran yang luas dari bundel software LAMP, ditampilkan di sini bersama-sama dengan Squid .
PHP adalah tujuan umum bahasa scripting yang sangat cocok untuk server-side pengembangan web , dalam hal ini PHP umumnya berjalan pada web server . Setiap kode PHP dalam file yang diminta dieksekusi oleh runtime PHP, biasanya untuk membuat halaman web dinamis konten atau gambar dinamis yang digunakan di website atau di tempat lain. [123] Hal ini juga dapat digunakan untuk baris perintah scripting dan client-side antarmuka pengguna grafis (GUI) aplikasi. PHP dapat digunakan pada kebanyakan server web, banyak sistem operasi dan platform , dan dapat digunakan dengan banyak sistem manajemen database relasional (RDBMS). Kebanyakan web hosting penyedia dukungan PHP untuk digunakan oleh klien mereka. Ini tersedia gratis, dan PHP Group menyediakan kode sumber lengkap bagi pengguna untuk membangun, menyesuaikan dan memperpanjang untuk mereka gunakan sendiri. [9]
PHP bertindak terutama sebagai penyaring , [124] mengambil input dari sebuah file atau stream yang berisi teks dan / atau instruksi PHP dan keluaran lain aliran data. Umumnya output akan HTML, walaupun bisa JSON , XML atau data biner seperti gambar atau format audio. Sejak PHP 4, PHP parser mengkompilasi masukan untuk menghasilkan bytecode untuk diproses oleh Zend mesin , memberikan kinerja yang meningkat lebih dari yang juru pendahulunya. [125]
Awalnya dirancang untuk membuat dinamis halaman web , PHP sekarang berfokus terutama pada server-side scripting , [126] dan mirip dengan bahasa server-side scripting lainnya yang menyediakan konten dinamis dari server web ke klien , seperti Microsoft 's ASP NET , Sun Microsystems ' JSP , [127] dan mod_perl . PHP juga telah menarik banyak pengembangan kerangka kerja perangkat lunak yang menyediakan blok bangunan dan struktur desain untuk mempromosikan pengembangan aplikasi cepat (RAD). Beberapa di antaranya adalah PRADO , CakePHP , Symfony , CodeIgniter , Laravel , Yii Kerangka , dan Zend Framework , menawarkan fitur serupa dengan lainnya kerangka kerja aplikasi web .
The Arsitektur LAMP telah menjadi populer di industri web sebagai cara untuk menyebarkan aplikasi web. [128] PHP umumnya digunakan sebagai P dalam berkas ini bersama Linux , Apache dan MySQL , meskipun P juga dapat merujuk ke Python , Perl , atau beberapa campuran dari tiga. Paket yang sama, WAMP dan MAMP , juga tersedia untuk Windows dan OS X , dengan huruf pertama berdiri untuk sistem operasi masing-masing. Meskipun kedua PHP dan Apache disediakan sebagai bagian dari basis Mac OS X menginstal, pengguna paket ini mencari mekanisme instalasi sederhana yang dapat lebih mudah terus up to date.
Pada April 2007 , lebih dari 20 juta domain Internet memiliki layanan web host pada server dengan PHP terinstal dan mod_php tercatat sebagai yang paling populer Server HTTP Apache modul. [129] Pada Oktober 2010 , PHP digunakan sebagai bahasa pemrograman server-side pada 75% dari semua situs web yang server-side bahasa pemrograman dikenal [130] (per Februari 2014 , persentase mencapai 82% [130] ), dan PHP adalah yang paling sering digunakan perangkat lunak open source di dalam perusahaan. [131] sistem manajemen konten web yang ditulis dalam PHP termasuk MediaWiki , [132] Joomla , EZ Publish , SilverStripe , [133] WordPress , [134] Drupal , [135] Moodle , [136] user- yang menghadapi porsi Facebook , [137] dan Digg . [138]
Untuk skenario penggunaan tertentu dan lebih maju, PHP menawarkan cara yang didefinisikan dengan baik dan didokumentasikan untuk menulis ekstensi kustom di C atau C ++ . [139] [140] [141] [142] [143] [144] [145] Selain memperluas bahasa dirinya dalam bentuk tambahan perpustakaan , ekstensi menyediakan cara untuk meningkatkan kecepatan eksekusi di mana sangat penting dan ada ruang untuk perbaikan dengan menggunakan benar bahasa yang dikompilasi . [146] [147] PHP juga menawarkan cara-cara yang didefinisikan dengan baik untuk embedding dirinya menjadi lain proyek perangkat lunak. Dengan cara itu PHP dapat dengan mudah digunakan sebagai internal bahasa scripting untuk proyek lain, juga menyediakan ketat berinteraksi dengan internal proyek spesifik struktur data . [148]
PHP mendapat tinjauan yang beragam karena kurang dukungan untuk multithreading di tingkat bahasa inti, [149] meskipun menggunakan benang dimungkinkan oleh "pthreads" PECL ekstensi. [150] [151]

Keamanan

Pada tahun 2013, 9% dari semua kerentanan yang terdaftar oleh Kerentanan database nasional terkait dengan PHP; [152] historis, sekitar 30% dari semua kerentanan yang terdaftar sejak tahun 1996 dalam database ini terkait dengan PHP. Kelemahan keamanan teknis dari bahasa itu sendiri atau dari perpustakaan intinya tidak sering (22 pada tahun 2009, sekitar 1% dari total meskipun PHP berlaku untuk sekitar 20% dari program yang terdaftar). [153] Menyadari bahwa programmer membuat kesalahan, beberapa bahasa termasuk mencemari memeriksa untuk secara otomatis mendeteksi kurangnya validasi input yang menginduksi banyak masalah. Fitur tersebut sedang dikembangkan untuk PHP, [154] tetapi dimasukkan ke dalam rilis telah ditolak beberapa kali di masa lalu. [155] [156]
Ada patch perlindungan canggih seperti Suhosin dan Pengerasan -Patch, dirancang khusus untuk lingkungan web hosting. [157]
Ada fitur bahasa tertentu dan parameter konfigurasi (terutama nilai-nilai default untuk pengaturan runtime tersebut) yang membuat PHP rentan terhadap masalah keamanan. Di antaranya, magic_quotes_gpc dan register_globals [158] perintah konfigurasi adalah yang terbaik dikenal; yang terakhir membuat parameter URL menjadi variabel PHP, membuka jalan untuk kerentanan keamanan yang serius dengan memungkinkan penyerang untuk menetapkan nilai dari setiap variabel global diinisiasi dan mengganggu pelaksanaan script PHP. Dukungan untuk " kutipan sihir "dan" mendaftar GLOBALS "telah usang sebagai PHP 5.3.0, dan dihapus sebagai PHP 5.4.0. [158] [159]
Contoh lain untuk kerentanan pengaturan runtime berasal dari gagal untuk menonaktifkan eksekusi PHP (melalui konfigurasi mesin direktif) [160] untuk direktori tempat upload foto disimpan; meninggalkan pengaturan default dapat mengakibatkan eksekusi kode PHP berbahaya tertanam dalam upload foto. [161] [162] [163] Juga, meninggalkan memungkinkan pembebanan dinamis ekstensi PHP (melalui konfigurasi enable_dl direktif) [164] dalam web shared tuan lingkungan dapat menyebabkan masalah keamanan. [165] [166]
Juga, tersirat konversi tipe yang menghasilkan nilai yang tidak kompatibel diperlakukan sebagai identik terhadap niat programmer dapat menyebabkan masalah keamanan. Sebagai contoh, hasil dari "0e1234" == "0" perbandingan akan menjadi kenyataan karena nilai dibandingkan pertama akan diperlakukan sebagai notasi ilmiah dari sejumlah (0 × 10 1 234) dengan nilai nol.Fitur ini mengakibatkan kerentanan otentikasi di Simple Machines Forum , [ 167 ] TYPO3 [ 168 ] dan phpBB [ 169 ] ketika MD5 sandi hash dibandingkan. Sebaliknya, operator identitas ( === ) harus digunakan, "0e1234" === "0" menghasilkan palsu .

0 komentar:

Posting Komentar