PHP MySQL Untuk Pemula Sampai Profesional
PHP MySQL Untuk Pemula Sampai Profesional
Meskipun dasar instalasi PHP cukup bagi sebagian besar pengguna awal,
kemungkinan besar Anda ingin membuat penyesuaian ke pengaturan konfigurasi
default dan mungkin bereksperimen dengan beberapa ekstensi pihak ketiga yang
tidak dibangun ke dalam distribusi secara default. Pada bagian ini Anda akan
mempelajari semua tentang bagaimana untuk men-tweak tingkah laku PHP dan
fitur untuk kebutuhan spesifik Anda.
Konfigurasi Menjalankan-Waktu
Ini mungkin untuk mengubah perilaku PHP pada waktu berjalan di kedua
Windows dan Linux melalui file php.ini. File ini berisi banyak sekali perintah
konfigurasi yang secara kolektif mengontrol perilaku setiap produk. Bagian
selanjutnya dari bab ini berfokus pada PHP yang paling umum digunakan direktif
konfigurasi, memperkenalkan tujuan, ruang lingkup, dan nilai default masingmasing.
File php.ini
Distribusi PHP dilengkapi dengan dua konfigurasi template, php.ini-dist dan
php.ini yang disarankan. Anda akan ingin mengubah nama salah satu file untuk
php.ini dan menempatkannya di tempat yang ditentukan oleh direktif PHPIniDir
ditemukan di file httpd.conf Apache. Ini menyarankan bahwa Anda menggunakan
yang terakhir karena banyak parameter yang ditemukan di dalamnya sudah
ditugaskan pengaturan yang kami anjurkan mereka. Mengambil Saran ini mungkin
akan menghemat banyak waktu awal dan upaya mengamankan dan tweaking
instalasi anda karena ada lebih dari 200 parameter konfigurasi yang berbeda
dalam file ini. Walaupun nilai-nilai default pergi jauh ke arah membantu Anda
dengan cepat menempatkan PHP, Anda mungkin ingin membuat penyesuaian
tambahan untuk perilaku PHP, jadi Anda harus belajar sedikit lebih banyak
tentang php.ini dan banyaknya parameter konfigurasi. Bagian yang akan datang
"Directives Konfigurasi PHP" menyajikan pengenalan yang komprehensif untuk
;
; Allow the <? tag
;
short_open_tag = Off
Baris yang dimulai dengan titik koma adalah komentar, sedangkan
parameter short_open_tag ditetapkan dengan nilai Off.
Tip Setelah Anda merasa nyaman dengan tujuan parameter konfigurasi,
pertimbangkan menghapus komentar untuk menyederhanakan isi file, sehingga
nantinya mengurangi waktu mengedit.
php_admin_flag: Mengatur nilai dari direktif yang ditentukan. Ini berbeda dari
php_value bahwa tidak dapat digunakan dalam sebuah file .htaccess dan tidak
dapat diganti dalam virtual host atau. htaccess.
Misalnya, dengan menonaktifkan tag direktif pendek dan mencegah orang
lain dari menolak itu, menambahkan baris berikut ke file httpd.conf anda:
php_admin_flag short_open_tag Off
Pilihan Bahasa
Direktif yang terletak di bagian ini menentukan beberapa bahasa perilaku yang
paling dasar. Anda pasti ingin mengambil beberapa saat untuk menjadi
berkenalan dengan berbagai kemungkinan konfigurasi.
engine = On | Off
Scope: PHP_INI_ALL; Default value: On
Parameter ini bertanggung jawab untuk menentukan apakah mesin PHP tersedia.
Mematikannya mencegah Anda menggunakan PHP sama sekali. Tentunya, Anda
harus meninggalkan ini diaktifkan jika Anda berencana untuk menggunakan PHP.
zend.ze1_compatibility_mode = On | Off
Scope: PHP_INI_ALL; Default value: Off
Beberapa tiga tahun setelah PHP 5.0 dirilis, PHP 4.x masih digunakan secara luas.
Salah satu alasan untuk upgrade siklus berkepanjangan ini disebabkan oleh
beberapa ketidaksesuaian berorientasi objek yang signifikan antara PHP 4 dan 5.
Direktif zend.ze1_compatibility_mode berupaya untuk mengembalikan beberapa
short_open_tag = On | Off
Scope: PHP_INI_ALL; Default value: On
Komponen script PHP ditutupi di dalam sintaks meloloskan diri. Ada empat format
lepas yang berbeda, terpendek yang dikenal sebagai tag terbuka pendek, yang
terlihat seperti ini:
<?
echo "Some PHP statement";
?>
Anda mungkin menyadari bahwa sintaks ini digunakan bersama dengan XML,
yang dapat menyebabkan masalah di lingkungan tertentu. Dengan demikian,
sarana untuk menonaktifkan ini dengan format tertentu yang telah disediakan.
Ketika short_open_tag diaktifkan (On), tag pendek diperbolehkan; bila
dinonaktifkan (Off), mereka tidak.
asp_tags = On | Off
Scope: PHP_INI_ALL; Default value: Off
PHP mendukung pembatas script ASP-style, yang terlihat seperti ini:
<%
echo "Some PHP statement";
%>
Jika Anda datang dari latar belakang ASP dan lebih memilih untuk terus
menggunakan sintaks pembatas ini, Anda dapat melakukannya dengan
mengaktifkan tag ini.
Catatan tag ASP-style tidak lagi tersedia dalam PHP 6.
precision = integer
Scope: PHP_INI_ALL; Default value: 12
PHP mendukung berbagai macam tipe data, meliputi bilangan floating-point.
Parameter presisi menentukan jumlah digit yang signifikan ditampilkan dalam
representasi bilangan floating-point. Catatan bahwa nilai ini disetel untuk 14 digit
pada sistem Win32 dan untuk 12 digit di Linux.
y2k_compliance = On | Off
Scope: PHP_INI_ALL; Default value: Off
Siapa yang bisa melupakan ketakutan Y2K hanya beberapa tahun yang lalu?
Manusia super upaya yang telah dilakukan untuk menghilangkan masalah yang
ditimbulkan oleh perangkat lunak non-Y2K-compliant, dan walaupun itu sangat
tidak mungkin, beberapa pengguna mungkin menggunakan liar kedaluwarsa,
browser tidak patuh. Jika untuk beberapa alasan aneh Anda yakin bahwa
sejumlah pengguna situs Anda jatuh ke dalam kelompok ini, kemudian
menonaktifkan parameter y2k_compliance, jika tidak, itu harus diaktifkan.
Pesan ini terjadi ketika script mencoba untuk mengubah header setelah sudah
dikirimkan kembali ke pengguna meminta. Paling umum mereka adalah hasil dari
programmer mencoba mengirim cookie ke pengguna setelah beberapa output
telah dikirimkan kembali ke browser, yang tidak mungkin untuk mencapai karena
header (tidak terlihat oleh user, tetapi digunakan oleh browser) akan selalu
mendahului output itu. PHP versi 4.0 menawarkan solusi untuk masalah ini yang
mengganggu dengan memperkenalkan konsep buffering output. Bila diaktifkan,
output buffering memberitahu PHP dapat mengirim output sekaligus, setelah
script telah selesai. Dengan cara ini, setiap perubahan yang terjadi setelah header
dapat dibuat di seluruh script karena belum dikirim. Mengaktifkan direktif
output_buffering ternyata pada output buffering. Atau, Anda dapat membatasi
ukuran output buffer (sehingga tersirat memungkinkan buffering output) dengan
menetapkan ke maksimum jumlah byte yang Anda ingin buffer ini berisi.
Jika anda tidak berencana untuk menggunakan buffering output, Anda
harus menonaktifkan direktif ini karena akan menghambat kinerja yang sedikit.
Tentu saja, solusi termudah untuk masalah header hanya dengan melewatkan
informasi sebelum konten lainnya jika dimungkinkan.
output_handler = string
Scope: PHP_INI_ALL; Default value: NULL
Direktif ini menarik memberitahu PHP dengan melewati semua output melalui
fungsi sebelum kembali ke pengguna yang meminta. Misalnya, Anda ingin
zlib.output_handler = string
Scope: PHP_INI_SYSTEM; Default value: NULL
zlib.output_handler menetapkan sebuah perpustakaan kompresi tertentu jika
perpustakaan zlib tidak tersedia.
implicit_flush = On | Off
Scope: PHP_INI_SYSTEM; Default value: Off
Mengaktifkan hasil implicit_flush secara otomatis membersihkan, atau
pembilasan, buffer output dari kontennya sesudah setiap panggilan untuk print ()
atau echo (), dan menyelesaikan tiap yang tertanam blok HTML. Ini mungkin
berguna dalam contoh di mana server memerlukan suatu periode yang luar biasa
panjang saatnya untuk mengkompilasi hasil atau melakukan perhitungan
tertentu. Dalam kasus tersebut, Anda dapat menggunakan fitur ini untuk output
update status ke pengguna bukan hanya menunggu sampai server menuntaskan
prosedur.
unserialize_callback_func = string
Scope: PHP_INI_ALL; Default value: NULL
Direktif ini memungkinkan Anda untuk mengontrol respon unserializer ketika
permintaan dibuat untuk menginisiasi kelas tidak terdefinisi. Untuk kebanyakan
pengguna, direktif ini tidak relevan karena PHP sudah output peringatan dalam
kasus tersebut jika melaporkan kesalahan PHP disetel untuk tingkat yang sesuai.
serialize_precision = integer
Scope: PHP_INI_ALL; Default value: 100
Direktif serialize_precision menentukan jumlah digit yang disimpan setelah
floating point ketika double dan floats yang serial. Pengaturan ini untuk sebuah
nilai yang sesuai memastikan bahwa presisi tidak berpotensi hilang ketika nomor
tersebut nantinya unserialized.
allow_call_time_pass_reference = On | Off
Scope: PHP_INI_SYSTEM; Default value: On
Fungsi argumen dapat dikirimkan dalam dua cara: dengan nilai dan dengan
referensi. Persis bagaimana setiap argumen dilewatkan untuk suatu fungsi pada
saat fungsi memanggil dapat ditentukan dalam definisi fungsi, yaitu cara
dianjurkan untuk melakukannya. Namun, Anda bisa memaksa semua argumen
yang akan dilalui dengan acuan pada saat fungsi panggilan dengan mengaktifkan
allow_call_time_pass_reference.
Pembahasan fungsi PHP pada Bab 4 membahas bagaimana argumen
fungsional dapat dilalui baik dengan nilai dan dengan referensi, dan implikasi dari
melakukannya.
Safe Mode
Ketika anda menempatkan PHP dalam lingkungan multiuser, seperti yang
ditemukan di server ISP-share, Anda mungkin ingin membatasi fungsionalitas.
Seperti yang mungkin Anda bayangkan, menawarkan semua pengguna
memerintah penuh atas semua fungsi PHP bisa membuka kemungkinan untuk
mengeksploitasi atau merusak sumber daya server dan file. Sebagai perlindungan
untuk menggunakan PHP pada shared server, PHP dapat dijalankan dalam
terbatas, atau mode aman,.
Mengaktifkan safe mode akan menonaktifkan cukup banyak beberapa
fungsi dan berbagai fitur dianggap berpotensi tidak aman dan dengan demikian
mungkin merusak jika mereka menyalahgunakan dalam script lokal. Sebuah
contoh kecil dari fungsi ini dinonaktifkan dan fitur meliputi parse_ini_file (),
chmod (), chown (), chgrp (), exec (), operator sistem (), dan operator backtick.
Mengaktifkan safe mode juga memastikan bahwa pemilik script yang sedang
dijalankan sesuai dengan pemilik dari setiap berkas atau direktori yang
ditargetkan dengan script itu. Namun, pembatasan ini terakhir khususnya dapat
memiliki yang tak terduga dan efek tidak nyaman karena file seringkali dapat
diupload dan sebaliknya yang dihasilkan oleh ID pengguna lainnya.
Selain itu, mengaktifkan safe mode membuka kemungkinan untuk
mengaktifkan beberapa pembatasan lain melalui konfigurasi direktif PHP lainnya,
masing-masing yaitu diperkenalkan pada bagian ini.
Catatan Karena sebagian part dapat membingungkan yang disebabkan
dengan nama dan pendekatan fitur tertentu, ditambah dengan membawa
konsekuensi yang tidak diinginkan karena beberapa user ID berperan pada
menciptakan dan memiliki berbagai file, fitur safe mode PHP telah dihapus dari
PHP 6.
safe_mode = On | Off
Scope: PHP_INI_SYSTEM; Default value: Off
Mengaktifkan direktif safe_mode hasil pada PHP yang dijalankan di bawah
kendala tersebut.
safe_mode_gid = On | Off
Scope: PHP_INI_SYSTEM; Default value: Off
Saat safe mode diaktifkan, sebuah safe_mode_gid diaktifkan memberlakukan
sebuah GID (grup ID) memeriksa ketika membuka file. Ketika safe_mode_gid
dinonaktifkan, sebuah UID lebih terbatas (ID pengguna) memeriksa diberlakukan.
safe_mode_include_dir = string
Scope: PHP_INI_SYSTEM; Default value: NULL
Safe_mode_include_dir ini menyediakan tempat yang aman dari diberlakukan cek
UID/GID ketika safe_mode dan berpotensi safe_mode_gid diaktifkan. UID / GID
memeriksa diabaikan ketika file dibuka dari direktori yang ditugaskan.
safe_mode_exec_dir = string
Scope: PHP_INI_SYSTEM; Default value: NULL
Saat safe mode diaktifkan, parameter safe_mode_exec_dir membatasi
pelaksanaan executable melalui fungsi exec () untuk direktori yang ditugaskan.
Misalnya, jika Anda ingin membatasi eksekusi untuk fungsi yang ditemukan pada /
usr / local / bin, Anda menggunakan direktif ini:
safe_mode_exec_dir = "/usr/local/bin"
safe_mode_allowed_env_vars = string
Scope: PHP_INI_SYSTEM; Default value: PHP_
Saat safe mode diaktifkan, Anda dapat membatasi sistem operasi manakah
yang tingkat variabel lingkungan pengguna dapat memodifikasi melalui script PHP
dengan direktif safe_mode_allowed_env_vars. Misalnya, pengaturan direktif ini
sebagai berikut modifikasi membatasi hanya variabel dengan awalan PHP_:
safe_mode_allowed_env_vars = "PHP_"
Perlu diketahui bahwa meninggalkan direktif ini kosong berarti bahwa pengguna
dapat memodifikasi variabel lingkungan.
safe_mode_protected_env_vars = string
Scope: PHP_INI_SYSTEM; Default value: LD_LIBRARY_PATH
Direktif safe_mode_protected_env_vars menawarkan cara untuk
mencegah secara tegas variabel lingkungan tertentu dari dimodifikasi. Misalnya,
jika Anda ingin mencegah pengguna dari memodifikasi variabel PATH dan
LD_LIBRARY_PATH, Anda menggunakan direktif ini:
safe_mode_protected_env_vars = "PATH, LD_LIBRARY_PATH"
open_basedir = string
Scope: PHP_INI_SYSTEM; Default value: NULL
Sama seperti direktif DocumentRoot Apache, direktif open_basedir PHP
dapat membuat direktori dasar untuk semua operasi file yang akan dibatasi. Hal
ini mencegah pengguna dari memasuki lainnya daerah terlarang dari server.
Misalnya, semua bahan Web terletak di dalam direktori / home / www. Untuk
mencegah user dari melihat dan berpotensi memanipulasi file seperti / etc /
passwd melalui beberapa perintah PHP sederhana, pertimbangkan pengaturan
open_basedir seperti ini:
open_basedir = "/home/www/"
Catatan bahwa pengaruh dilaksanakan dengan direktif ini tidak tergantung pada
direktif safe_mode.
disable_functions = string
Scope: PHP_INI_SYSTEM; Default value: NULL
Dalam lingkungan tertentu, Anda mungkin ingin sepenuhnya melarang
penggunaan fungsi standar tertentu, seperti exec () dan system (). Fungsi tersebut
menempatkan
mereka
untuk
parameter
disable_classes = string
Scope: PHP_INI_SYSTEM; Default value: NULL
Mengingat kemampuan yang ditawarkan oleh PHP mencakup paradigma
berorientasi objek, kemungkinan tidak akan terlalu lama sebelum Anda
menggunakan menentukan yang besar perpustakaan kelas. Mungkin ada kelaskelas tertentu ditemukan di dalam perpustakaan ini bahwa Anda tidak ingin
membuat tersedia, Namun demikian. Anda dapat mencegah penggunaan kelaskelas ini melalui direktif disable_classes. Sebagai contoh, jika Anda ingin
menonaktifkan dua kelas tertentu, vektor bernama dan grafik, Anda
menggunakan berikut:
disable_classes = "vector, graph"
Catatan bahwa pengaruh dilaksanakan oleh direktif ini tidak tergantung pada
direktif safe_mode.
ignore_user_abort = Off | On
Scope: PHP_INI_ALL; Default value: On
Seberapa banyak waktu telah anda browse ke halaman tertentu hanya untuk
keluar atau menutup browser sebelum halaman benar-benar terbuka? Seringkali
perilaku seperti itu tidak berbahaya. Namun, bagaimana jika server berada di
tengah-tengah memperbarui informasi profil pengguna yang penting, atau
menyelesaikan
transaksi
komersial?
Mengaktifkan
ignore_user_abort
menyebabkan server untuk mengabaikan terminasi session yang disebabkan oleh
pengguna atau gangguan yang dimulai browser.
Menyoroti Syntax
PHP dapat menampilkan dan menyorot kode sumber. Dapat mengaktifkan fitur ini
baik dengan menempatkan script PHP ekstensi. phps (ini adalah ekstensi default
dan, saat Anda akan segera belajar, dapat dimodifikasi) atau melalui show_source
() atau fungsi highlight_file (). Untuk menggunakan ekstensi phps, Anda harus
menambahkan baris berikut ke httpd.conf:
AddType application/x-httpd-php-source .phps
Anda dapat mengontrol warna string, komentar, kata kunci, latar belakang, teks
standar, dan komponen HTML sumber disorot melalui enam direktif berikut.
Setiap dapat diberi suatu, RGB, heksadesimal, atau representasi dari masingmasing kata kunci warna. Sebagai contoh, warna biasanya kita sebut sebagai
hitam bisa direpresentasikan sebagai rgb (0,0,0), # 000000, atau hitam, masingmasing.
highlight.string = string
Scope: PHP_INI_ALL; Default value: #DD0000
highlight.comment = string
Scope: PHP_INI_ALL; Default value: #FF9900
highlight.keyword = string
Scope: PHP_INI_ALL; Default value: #007700
highlight.bg = string
Scope: PHP_INI_ALL; Default value: #FFFFFF
highlight.default = string
Scope: PHP_INI_ALL; Default value: #0000BB
highlight.html = string
Scope: PHP_INI_ALL; Default value: #000000
Bermacam-macam
Kategori Lainnya terdiri dari direktif tunggal, expose_php.
expose_php = On | Off
Scope: PHP_INI_SYSTEM; Default value: On
Setiap potongan informasi bahwa penyerang berpotensi dapat mengumpulkan
tentang server Web meningkatkan kemungkinan bahwa ia akan berhasil
membahayakan itu. Salah satu cara sederhana untuk memperoleh informasi
penting mengenai karakteristik server adalah melalui tanda tangan server.
misalnya, Apache akan menyiarkan informasi berikut dalam setiap header respon
secara default:
Apache/2.2.0 (Unix) PHP/6.0.0 PHP/6.0.0-dev Server at www.example.com Port
80
Menonaktifkan expose_php mencegah tanda tangan server Web (jika diaktifkan)
dari penyiaran fakta bahwa PHP yang terinstal. Meskipun Anda perlu mengambil
langkah-langkah lain untuk memastikan perlindungan server yang memadai,
menutupi Properti server seperti yang satu ini sungguh-sungguh tetap dianjurkan.
Catatan Anda dapat menonaktifkan siaran tanda tangan server Apache
dengan pengaturan ServerSignature ke Tidak aktif dalam file httpd.conf.
max_execution_time = integer
Scope: PHP_INI_ALL; Default value: 30
Parameter max_execution_time menempatkan batas atas jumlah waktu, dalam
detik, bahwa script PHP dapat dieksekusi. Pengaturan parameter ini dengan 0
Menonaktifkan batas maksimum. Catatan bahwa setiap waktu dikonsumsi oleh
program eksternal yang dijalankan oleh perintah PHP, seperti exec () dan system
(), tidak dihitung terhadap batas ini.
max_input_time = integer
Scope: PHP_INI_ALL; Default value: 60
Parameter max_input_time menempatkan batas pada jumlah waktu, dalam detik,
bahwa script PHP mencurahkan dengan penguraian permintaan data. Parameter
ini sangat penting ketika Anda meng-upload file besar menggunakan PHP fitur
upload file, yang dibahas dalam Bab 15.
memory_limit = integerM
Scope: PHP_INI_ALL; Default value: 8M
Parameter memory_limit menentukan jumlah maksimum memori, dalam
megabyte, yang dapat dialokasikan ke skrip PHP.
Penanganan Data
Parameter diperkenalkan pada bagian ini mempengaruhi cara PHP menangani
eksternal variabel-yaitu, variabel dilewatkan ke dalam script melalui beberapa
sumber luar. GET, POST, cookies, sistem operasi, dan server semua
memungkinkan kandidat untuk menyediakan eksternal data. Parameter lain yang
terletak di bagian ini menentukan pengaturan karakter default PHP, tipe MIME
default PHP, dan apakah file eksternal akan secara otomatis didahului atau
ditambahkan ke output PHP dikembalikan.
arg_separator.output = string
Scope: PHP_INI_ALL; Default value: &
PHP mampu secara otomatis menghasilkan URL dan menggunakan standar
ampersand (&) untuk memisahkan variabel input. Namun, jika anda ingin
merubah konvensi ini, Anda dapat melakukannya dengan menggunakan direktif
arg_separator.output.
arg_separator.input = string
Scope: PHP_INI_ALL; Default value: ;&
The ampersand (&) adalah karakter standar yang digunakan untuk memisahkan
variabel input melewati melalui metode POST atau GET. Meskipun tidak mungkin,
sebaiknya anda ingin merubah konvensi ini dalam aplikasi PHP anda, anda dapat
melakukannya dengan menggunakan direktif arg_separator.input.
variables_order = string
Scope: PHP_INI_ALL; Default value: EGPCS
Direktif variables_order menentukan urutan ENVIRONMENT, GET, POST, COOKIE,
dan SERVER variabel diuraikan. Sementara tampaknya tidak relevan, jika
register_globals diaktifkan (tidak direkomendasikan), urutan dari nilai ini dapat
mengakibatkan hasil yang tidak diharapkan karena adanya variabel kemudian
menimpa yang diuraikan sebelumnya dalam proses.
register_globals = On | Off
Scope: PHP_INI_SYSTEM; Default value: Off
Jika Anda telah menggunakan pra versi-4.0 PHP, hanya menyebutkan direktif ini
cukup untuk membangkitkan kertak gigi dan menarik rambut. Untuk
menghilangkan masalah, direktif ini telah dinonaktifkan secara default di versi
4.2.0, tapi pada biaya memaksa banyak waktu panjang pengguna PHP untuk
sepenuhnya memikirkan kembali (dan dalam beberapa kasus rewrite) metodologi
pengembangan aplikasi Web mereka. Perubahan ini, walaupun dilakukan dengan
biaya cukup yang membingungkan, akhirnya melayani kepentingan terbaik dari
pengembang dalam hal keamanan aplikasi yang lebih besar. Jika Anda baru untuk
semua ini, apa masalahnya?
Secara historis, semua variabel eksternal secara otomatis terdaftar dalam
lingkup global. Artinya, setiap variabel yang masuk dari jenis COOKIE,
ENVIRONMENT, GET, POST, dan SERVER dibuat tersedia secara global. Karena
mereka tersedia secara global, mereka juga secara global dapat dimodifikasi.
Meskipun ini mungkin tampak nyaman untuk beberapa orang, ini juga
diperkenalkan kekurangan keamanan karena variabel dimaksudkan untuk dikelola
register_long_arrays = On | Off
Scope: PHP_INI_SYSTEM; Default value: On
Direktif ini menentukan apakah melanjutkan mendaftarkan berbagai input array
(ENVIRONMENT, GET, POST, COOKIE, SISTEM) dengan menggunakan sintaks
kadaluarsa, seperti HTTP_*_VARS. Menonaktifkan direktif ini direkomendasikan
untuk alasan kinerja.
Catatan Direktif register_long_arrays tidak lagi tersedia pada PHP 6.
register_argc_argv = On | Off
Scope: PHP_INI_SYSTEM; Default value: On
Melintas di informasi variabel melalui metode GET adalah sama dengan melewati
argumen ke sebuah eksekusi. Banyak bahasa memproses argumen seperti dalam
hal argc dan argv. argc adalah jumlah argumen, dan argv adalah array diindeks
berisi argumen. Jika Anda ingin mendeklarasikan variabel $argc dan $argv dan
menirukan fungsi ini, aktifkan register_argc_argv.
post_max_size = integerM
Scope: PHP_INI_SYSTEM; Default value: 8M
Dari dua metode untuk melewati data antara permintaan, POST lebih siap untuk
mengangkut jumlah besar, seperti apa yang mungkin dikirimkan melalui formulir
Web. Namun, untuk kedua alasan keamanan dan kinerja, Anda mungkin ingin
menempatkan uper ceiling pada tepatnya berapa banyak data dapat dikirim
melalui metode ini untuk script PHP, ini bisa dicapai dengan menggunakan
post_max_size.
semua tanda kutip tunggal dan ganda, backslash, dan karakter null secara
otomatis mengeluarkan dengan backslash.
magic_quotes_runtime = On | Off
Scope: PHP_INI_ALL; Default value: Off
Mengaktifkan parameter ini menghasilkan pada secara otomatis keluar
(menggunakan backslash) dari setiap tanda kutip yang terletak di dalam data
dikembalikan dari sumber eksternal, seperti database atau file teks.
magic_quotes_sybase = On | Off
Scope: PHP_INI_ALL; Default value: Off
Parameter ini hanya kepentingan jika magic_quotes_runtime diaktifkan. Jika
magic_quotes_sybase diaktifkan, semua data dikembalikan dari sumber eksternal
akan diganti menggunakan tanda kutip tunggal dan bukan backslash. Hal ini
berguna ketika data ini telah kembali dari database Sybase, yang mempekerjakan
kebutuhan yang agak tidak lazim untuk keluar dari karakter khusus dengan
kutipan tunggal daripada backslash.
auto_prepend_file = string
Scope: PHP_INI_SYSTEM; Default value: NULL
Membuat template halaman header atau meliputi perpustakaan kode sebelum
script PHP dieksekusi ini paling sering dilakukan dengan menggunakan fungsi
include () atau require (). Anda dapat mengotomatisasi proses ini dan melupakan
masuknya fungsi ini dalam skrip Anda dengan menugaskan nama file dan path
yang sesuai dengan direktif auto_prepend_file.
auto_append_file = string
Scope: PHP_INI_SYSTEM; Default value: NULL
Secara otomatis menyisipkan footer template setelah script PHP dieksekusi ini
paling sering dilakukan dengan menggunakan fungsi include () atau require ().
Anda dapat mengotomatisasi proses ini dan melupakan masuknya fungsi ini
dalam skrip Anda dengan menempatkan nama file template dan path yang sesuai
dengan direktif auto_append_file.
default_mimetype = string
Scope: PHP_INI_ALL; Default value: text/html
Tipe MIME menawarkan cara standar untuk mengklasifikasi tipe file di Internet.
Anda dapat melayani semua tipe file ini melalui aplikasi PHP, yang paling umum
digunakan adalah text / html. Jika Anda menggunakan PHP pada mode lainnya,
namun, seperti generator konten untuk aplikasi WML (Wireless Markup
Language), Anda perlu menyesuaikan tipe MIME yang sesuai. Anda dapat
melakukannya dengan memodifikasi direktif default_mimetype.
default_charset = string
Scope: PHP_INI_ALL; Default value: iso-8859-1
Pada versi 4.0, PHP output pengkodean karakter dalam header Content-Type.
Secara default ini diatur untuk iso-8859-1, yang mendukung bahasa seperti
bahasa Inggris, Spanyol, Jerman, Italia, dan Portugis, antara lain. Jika aplikasi Anda
diarahkan terhadap bahasa seperti Jepang, Cina, atau Ibrani, bagaimanapun,
direktif default_charset memungkinkan Anda untuk memperbarui karakter ini
menetapkan pengaturan yang sesuai.
always_populate_raw_post_data = On | Off
Scope: PHP_INI_PERDIR; Default value: On
Mengaktifkan direktif always_populate_raw_post_data menyebabkan PHP untuk
menetapkan string yang terdiri dari nama POSTED / pasangan nilai variabel $
HTTP_RAW_POST_DATA, bahkan jika form variabel tidak memiliki nilai yang
sesuai. Misalnya, direktif ini diaktifkan dan Anda membuat bentuk yang terdiri
dari dua bidang teks, satu untuk nama pengguna dan satu lagi untuk alamat email pengguna. Dalam form tindakan yang dihasilkan, Anda mengeksekusi satu
perintah:
echo $HTTP_RAW_POST_DATA;
Melengkapi field tidak ada dan klik tombol Submit hasil pada output sebagai
berikut:
name=&email=
Melengkapi kedua field dan mengklik tombol Submit menghasilkan output yang
sama sebagai berikut:
name=jason&email=jason%40example.com
include_path = string
Scope: PHP_INI_ALL; Default value: NULL
Path yang parameter ini diatur berfungsi sebagai path dasar yang digunakan oleh
fungsi-fungsi seperti include (), require (), dan fopen_with_path (). Anda dapat
menetapkan beberapa direktori dengan memisahkan masing-masing dengan titik
koma, seperti yang ditunjukkan dalam contoh berikut:
include_path=".:/usr/local/include/php;/home/php"
Secara default, parameter ini diatur ke path yang didefinisikan oleh variabel
lingkungan PHP_INCLUDE_PATH.
Perhatikan bahwa pada Windows, belakang slash digunakan sebagai pengganti
garis miring depan, dan surat pengantar drive path:
include_path=".;C:\php6\includes"
doc_root = string
Scope: PHP_INI_SYSTEM; Default value: NULL
Parameter ini menentukan standar dari mana semua skrip PHP akan dilayani.
Parameter ini hanya digunakan jika tidak kosong.
user_dir = string
Scope: PHP_INI_SYSTEM; Default value: NULL
Direktif user_dir menetapkan direktori mutlak menggunakan PHP saat membuka
file menggunakan konvensi / ~ username. Sebagai contoh, ketika user_dir diatur
ke / home / users dan menggunakan mencoba untuk membuka file ~ / Gilmore /
koleksi / books.txt, PHP tahu bahwa path absolut adalah / home / users / Gilmore
/ koleksi / books.txt.
extension_dir = string
Scope: PHP_INI_SYSTEM; Default value: ./
Direktif extension_dir memberitahu PHP dimana ekstensi loadable tersebut
(modul) berada. Secara standar, ini diatur ke /,. yang berarti bahwa ekstensi load
berada di direktori yang sama seperti script yang sedang dijalankan. Dalam
lingkungan Windows, jika extension_dir tidak diatur, maka akan standar ke C: \
PHP-INSTALASI-DIRECTORY \ ext \. Di lingkungan Linux, lokasi yang tepat dari
direktori ini tergantung pada beberapa faktor, walaupun itu sangat mungkin
bahwa
lokasi
tersebut
akan
di
PHP-INSTALLATIONDIRECTORY/lib/php/extensions/no-debug-zts-RELEASE-BUILD-DATE /.
enable_dl = On | Off
Scope: PHP_INI_SYSTEM; Default value: On
enable_dl () berfungsi memperbolehkan user untuk me-load ekstensi PHP pada
run time-yaitu, selama eksekusi script.
Fopen Wrapper
Bagian ini berisi lima direktif terkait untuk akses dan manipulasi file remote.
allow_url_fopen = On | Off
Scope: PHP_INI_ALL; Default value: On
Mengaktifkan Allow_url_fopen memungkinkan PHP untuk menangani file jarak
jauh, hampir seolah-olah mereka lokal. Bila diaktifkan, script PHP dapat
mengakses dan memodifikasi file yang berada pada server remote, jika file
memiliki izin yang benar.
from = string
Scope: PHP_INI_ALL; Default value: NULL
Judul dari direktif mungkin menyesatkan dalam bahwa sebenarnya menentukan
password, bukan identitas, pengguna tanpa nama yang digunakan untuk
melakukan koneksi FTP. Karena itu, jika dari diatur seperti ini.
from = [email protected]
tanpa nama username dan password [email protected] akan dilewatkan ke
server bila otentikasi diminta.
user_agent = string
Scope: PHP_INI_ALL; Default value: NULL
PHP selalu mengirimkan sebuah header konten bersama dengan Output
olahannya, termasuk atribut user agent. Direktif ini menentukan nilai atribut itu.
default_socket_timeout = integer
Scope: PHP_INI_ALL; Default value: 60
Direktif ini menentukan nilai waktu-luar soket berbasis arus dalam detik.
auto_detect_line_endings = On | Off
Scope: PHP_INI_ALL; Default value: Off
Salah satu sumber yang tidak pernah berakhir rasa frustrasi pengembang berasal
dari karakter garis-akhir-(EOL) karena berbagai sintaks yang digunakan oleh
sistem operasi yang berbeda. Mengaktifkan auto_detect_line_endings
menentukan apakah data yang dibaca oleh fgets () dan file () menggunakan
Macintosh, MS-DOS, atau konvensi berkas Linux.
Dynamic Extensions
Bagian ini berisi direktif tunggal, ekstensi.
extension = string
Scope: PHP_INI_ALL; Default value: NULL
Direktif ekstensi digunakan secara dinamis memuat modul tertentu. Pada sistem
operasi Win32, sebuah modul mungkin dimuat seperti ini:
extension = php_java.dll
Pada Unix, itu akan dimuat seperti ini:
extension = php_java.so
CHAPTER 3
PHP Basics
Anda hanya dua bab dalam buku dan sudah cukup sedikit tanah telah ditutupi.
Sekarang, Anda sudah familiar dengan PHP dan latar belakang sejarah dan telah
menggali jauh ke dalam dalam instalasi dan konsep konfigurasi dan prosedur.
Materi ini mengatur tahapan untuk apa yang akan membentuk inti dari banyak
materi yang tersisa dalam buku ini: membuat aplikasi PHP yang kuat. Bab ini
memulai diskusi ini, memperkenalkan sejumlah besar fitur dasar bahasa ini.
Khususnya, Anda akan belajar bagaimana untuk melakukan hal berikut:
Default Sintaks
Sintaks pembatas default dibuka dengan <php dan diakhiri dengan??>, seperti ini:
<h3>Welcome!</h3>
<?php
echo "<p>Some dynamic output here</p>";
?>
<p>Some static output here</p>
Jika Anda menyimpan kode ini sebagai test.php dan menjalankannya dari PHPenabled Web server, Anda akan melihat output yang ditunjukkan pada Gambar 31.
Short-tags
Untuk menguarangi dimotivasi tukang ketik sintaks pembatas lebih pendek
tersedia. Dikenal sebagai short-tags, sintaks ini bukan referensi php yang
diperlukan dalam sintaks default. Namun, dengan menggunakan fitur ini, Anda
harus mengaktifkan direktif short_open_tag PHP. Sebuah contoh berikut:
<?
print "This is another PHP example.";
?>
Perhatian Walaupun pembatas short-tag mudah dicapai, perlu diingat bahwa
mereka berbenturan dengan XML, dan dengan demikian XHTML, sintaks. Oleh
karena itu, untuk alasan kesesuaiannya Anda tidak harus menggunakan sintaks
short-tag.
Ketika pendek sintaks tag diaktifkan dan Anda ingin cepat mengeluarkan untuk
dan dari PHP dengan output sedikit teks dinamis, Anda dapat menghilangkan
pernyataan menggunakan variasi output dikenal sebagai sintaks-pendek:
Script
Secara historis, editor tertentu, Microsoft FrontPage editor pada khususnya,
memiliki masalah menangani dengan sintaks lepas seperti yang digunakan oleh
PHP. Oleh karena itu, dukungan untuk varian lain pembatas utama, <script>,
ditawarkan:
<script language="php">
print "This is another PHP example.";
</script>
Gaya ASP
Halaman Microsoft ASP menggunakan strategi yang sama, pembatasan statis dari
sintaks dinamis dengan menggunakan pola karakter yang telah ditetapkan,
membuka sintaks dinamis dengan <%, dan penutup dengan%>. Jika Anda datang
dari latar belakang ASP dan lebih memilih untuk terus menggunakan ini
mengeluarkan sintaks, PHP mendukungnya. Berikut ini contohnya:
<%
print "This is another PHP example.";
%>
</body>
</html>
Seperti yang Anda lihat, setiap variabel yang dideklarasikan pada blok kode
sebelumnya adalah "diingat" untuk blok kemudian, seperti halnya dengan
variabel $date dalam contoh ini.
Shell Syntax
PHP juga mendukung alternatif sintaks C + +-style single-line, yang dikenal sebagai
sintaks shell, yang diawali dengan tanda pagar (#). Meninjau Kembali contoh
sebelumnya, saya akan menggunakan tanda pagar untuk menambahkan
beberapa informasi tentang script:
<?php
# Title: My PHP program
# Author: Jason
echo "This is a PHP program";
?>
Multiple-Line C Syntax
Ini sering mudah digunakan untuk menyertakan yang terlebih deskripsi fungsional
verbose atau catatan penjelasan lain dalam kode, yang secara logis menjamin
banyak baris. Meskipun Anda dapat pengantar setiap baris dengan C + + atau
pembatas gaya shell, PHP juga menawarkan banyak varian garis yang dapat
membuka dan menutup komentar pada baris yang berbeda. Berikut contoh:
<?php
/*
Title: My PHP Program
Author: Jason
Date: July 26, 2007
*/
?>
Catatan Sepanjang bab ini, dan bahkan sepanjang buku ini, ketika
memperkenalkan fungsi saya akan merujuk prototipe mereka. Prototipe adalah
hanya definisi function, meresmikan namanya, input parameter, dan Tipe nilai itu
kembali, yang ditentukan oleh suatu datatipe. Jika Anda tidak tahu apa datatype,
lihat bagian "Datatipe PHP yang didukung " nantinya dalam bab ini.
pernyataan print () output data yang diberikan kepada browser. Prototipe terlihat
seperti ini:
int print(argument)
Semua dari berikut adalah dapat diterima pernyataan print():
<?php
print("<p>I love the summertime.</p>");
?>
<?php
$season = "summertime";
print "<p>I love the $season.</p>";
?>
<?php
print "<p>I love the
summertime.</p>";
?>
Semua pernyataan menghasilkan output yang sama:
print (), mereka akan tidak relevan bagi sebagian besar pembaca dan oleh karena
itu tidak dibahas di sini. echo (prototipe ) terlihat seperti ini:
void echo(string argument1 [, ...string argumentN])
Seperti yang dapat Anda lihat dari prototipe, echo () mampu mengeluarkan
beberapa string. Kegunaan dari sifat khusus ini dipertanyakan; menggunakannya
tampaknya menjadi hal preferensi lebih dari apa pun. Meskipun demikian, ini
tersedia jika Anda merasa perlu. Berikut ini contohnya:
<?php
$heavyweight = "Lennox Lewis";
$lightweight = "Floyd Mayweather";
echo $heavyweight, " and ", $lightweight, " are great fighters.";
?>
Kode ini menghasilkan sebagai berikut:
Jika niat Anda adalah untuk output campuran teks statis dan informasi dinamis
melewati variabel, pertimbangkan untuk menggunakan printf () sebagai gantinya,
yang diperkenalkan berikutnya. Sebaliknya, jika Anda ingin hanya output teks
statis, echo () atau print () bekerja dengan baik.
Tip Mana yang lebih cepat, echo () atau print ()? Faktanya bahwa mereka secara
fungsional dipertukarkan meninggalkan banyak memikirkan pertanyaan ini.
Jawabannya adalah bahwa echo () fungsi adalah Agak lebih cepat karena
mengembalikan tidak ada, sedangkan print () akan mengembalikan 1 jika
pernyataan itu berhasil output. Ini agak tidak mungkin bahwa Anda akan melihat
perbedaan kecepatan, bagaimanapun, jadi Anda dapat mempertimbangkan
keputusan penggunaan menjadi salah satu gaya perhatian.
Dalam contoh ini,% d merupakan tempat yang dikenal sebagai spesifikasi tipe,
dan d menunjukkan nilai integer akan ditempatkan pada posisi itu. Ketika
pernyataan printf () mengeksekusi, argumen tunggal, 100, akan dimasukkan ke
dalam dudukan. Ingat bahwa sebuah integer yang diharapkan, jadi jika Anda
meneruskan sejumlah termasuk nilai desimal (dikenal sebagai float), maka akan
dibulatkan ke integer terdekat. Jika Anda melewati sepanjang 100,2, atau 100,6
100 akan di tampilkan. Melewati sepanjang nilai string seperti "seratus", dan 0
akan di tampilkan. Logika serupa menerapkan untuk spesifikasi tipe lainnya (lihat
Tabel 3-1 untuk daftar specifier yang umum digunakan).
Jadi apa yang Anda lakukan jika Anda ingin menyampaikan dua nilai? Hanya
memasukkan dua specifier menjadi string dan pastikan Anda melewatkan dua
nilai bersama sebagai argumen. Sebagai contoh, berikut pernyataan printf ()
melintas di sebuah nilai integer dan float:
printf("%d bottles of tonic water cost $%f", 100, 43.20);
Menjalankan perintah ini menghasilkan sebagai berikut:
Masih specifier lain yang ada untuk tweaker keseluruhan argumen itu, padding,
sign, dan lebar. Konsultasikan manual PHP untuk informasi lebih lanjut.
Pernyataan sprintf()
Pernyataan sprintf () secara fungsional sama dengan printf () selain bahwa output
ditugaskan untuk string bukan yang diberikan untuk browser. Prototipe berikut:
string sprintf(string format [, mixed arguments])
contoh berikut :
$cost = sprintf("$%.2f", 43.2); // $cost = $43.20
Boolean
Tipe data Boolean diberi nama setelah George Boole (1815-1864), seorang
matematikawan yang dianggap sebagai salah satu pendiri teori informasi. Sebuah
variabel Boolean merupakan kebenaran, hanya mendukung dua nilai: TRUE dan
FALSE (case sensitive). Sebagai alternatif, Anda dapat menggunakan nol untuk
mewakili FALSE, dan setiap nilai bukan nol untuk mewakili TRUE. Beberapa contoh
berikut:
$alive = false;
// $alive is false.
$alive = 1;
// $alive is true.
$alive = -1;
// $alive is true.
$alive = 5;
// $alive is true.
$alive = 0;
// $alive is false.
Integer
Sebuah integer mewakili dari seluruh nomor atau, dengan kata lain, jumlah yang
tidak berisi bagian pecahan. PHP mendukung nilai integer diwakili dalam basis 10
(desimal), basis 8 (oktal), dan basis 16 (heksadesimal) penomoran sistem,
meskipun sepertinya Anda hanya akan peduli dengan yang pertama dari sistem
tersebut. Beberapa contoh berikut:
42
-678900
// decimal
// decimal
0755
// octal
0xC4E
// hexadecimal
Float
angka Floating-point, juga disebut sebagai float, double, atau bilangan real,
memungkinkan Anda untuk menentukan angka yang berisi bagian pecahan. Float
yang digunakan untuk mewakili nilai Keuangan, berat, jarak, dan berbagai macam
representasi lain di mana nilai integer sederhana tidak akan cukup. Float PHP
dapat dispesifikasikan dalam berbagai cara, masing-masing yang dicontohkan di
sini:
4.5678
4.0
8.7e4
1.23E+11
String
Sederhananya, string merupakan rangkaian karakter ditangani sebagai kelompok
berdampingan. String dipisahkan oleh tanda kutip tunggal atau ganda, meskipun
PHP juga mendukung metodologi pembatasan lainnya, yang diperkenalkan dalam
bagian berikutnya "String Interpolation."
Berikut ini adalah contoh dari string yang valid:
"PHP is a great language"
"whoop-de-do"
'*9subway\n'
"123$%^789"
Menurut sejarah, string PHP diperlakukan dengan cara yang sama sebagai array
(lihat bagian berikutnya, "Datatypes gabungan," untuk informasi lebih lanjut
tentang array), memungkinkan untuk karakter khusus untuk diakses melalui
notasi yang diimbangi dengan array. Contoh, perhatikan string berikut:
$color = "maroon";
Anda bisa mengambil karakter tertentu dari string dengan memperlakukan string
sebagai array, seperti ini:
$parser = $color[2]; // Assigns 'r' to $parser
$state[0] = "Alabama";
$state[1] = "Alaska";
$state[2] = "Arizona";
...
$state[49] = "Wyoming";
Array secara formal diperkenalkan dalam Bab 5, jadi jangan terlalu khawatir
tentang hal jika Anda tidak sepenuhnya memahami konsep-konsep ini sekarang.
Catatan PHP juga mendukung array yang terdiri dari beberapa dimensi, lebih
dikenal sebagai array multidimensi. Konsep ini diperkenalkan dalam Bab 5.
Objek
Tipe data kompleks lain yang didukung oleh PHP adalah objek. Objek adalah
konsep utama dari paradigma pemrograman berorientasi objek. Jika Anda masih
baru dengan pemrograman berorientasi obyek, Bab 6 dan 7 yang dikhususkan
untuk topik ini.
Berbeda dengan tipe data lain yang berisi pada bahasa PHP, sebuah objek
harus secara tegas dideklarasikan. Pernyataan karakteristik obyek dan perilaku
terjadi di dalam sesuatu yang disebut kelas. Berikut adalah contoh umum dari
sebuah definisi kelas danselanjutnya pemanggilan:
class Appliance {
private $_power;
function setPower($status) {
$this->_power = $status;
}
}
...
$blender = new Appliance;
Sebuah definisi kelas menciptakan beberapa atribut dan fungsi yang
berkaitan dengan suatu struktur data, pada kasus ini struktur data bernama
Appliance. Hanya ada satu atribut, power, yang dapat dimodifikasi dengan
menggunakan metode setPower ().
Ingat, bagaimanapun, bahwa suatu definisi kelas adalah template dan tidak
bisa dimanipulasi. Sebaliknya, objek dibuat berdasarkan template ini. Ini dicapai
melalui kata kunci baru. Oleh karena itu, pada baris terakhir dari daftar
sebelumnya, sebuah objek dari kelas Appliance bernama blender dibuat.
Atribut power Objek blender itu kemudian dapat diatur dengan membuat
menggunakan metode setPower ():
$blender->setPower("on");
Perbaikan model Pengembangan berorientasi obyek PHP adalah menyoroti
dari PHP 5 dan lebih ditingkatkan pada PHP 6. Bab 6 dan 7 dikhususkan dengan
cakupan menyeluruh dari model pembangunan berorientasi objek PHP.
Mari kita pertimbangkan beberapa contoh. Misalnya anda ingin memilih integer
sebagai double:
$score = (double) 13; // $score = 13.0
Tipe casting double ke integer akan menghasilkan nilai integer yang
dibulatkan ke bawah, terlepas dari nilai desimal. Berikut ini contohnya:
$score = (int) 14.8; // $score = 14
Apa yang terjadi jika Anda melemparkan tipe data string dengan yang
integer? Mari kita cari tahu:
$sentence = "This is a sentence";
$model = "Toyota";
$obj = (object) $model;
Nilai ini kemudian dapat direferensikan sebagai berikut:
print $ obj->scalar; // returns "Toyota"
// an integer
Fungsi Tipe-Terkait
Sedikit fungsi yang tersedia baik untuk memverifikasi dan mengkonversi tipe data,
mereka akan dibahas dalam bagian ini.
Mengambil Tipe
fungsi gettype () mengembalikan tipe variabel yang ditetapkan oleh var. Secara
keseluruhan, delapan yang memungkinkan mengembembalikan nilai yang
tersedia: array, boolean, double, integer, obyek, resource, string, dan tipe yang
tidak diketahui. Prototipe seperti berikut:
string gettype (mixed var)
Mengkonversi Tipe
fungsi settype ()mengubah variabel, yang ditentukan oleh var, dengan tipe yang
ditentukan oleh tipe. Tujuh Tipe nilai yang mungkin tersedia: array, boolean, float,
integer, null, object, dan string. Jika konversi berhasil, TRUE dikembalikan,
sebaliknya, FALSE akan dikembalikan. Prototipe Its berikut:
boolean settype(mixed var, string type)
$item = 43;
printf("The variable \$item is of type array: %d <br />", is_array($item));
printf("The variable \$item is of type integer: %d <br />",
is_integer($item));
printf("The variable \$item is numeric: %d <br />", is_numeric($item));
?>
Kode ini mengembalikan sebagai berikut:
Pengidentifikasi
Pengidentifikasi adalah istilah umum yang diterapkan untuk variabel, fungsi, dan
berbagai objek yang ditetapkan pengguna lainnya. Ada beberapa properti bahwa
Pengidentifikasi PHP harus mematuhi pada:
Sebuah pengidentifikasi dapat terdiri dari satu atau lebih karakter dan harus
dimulai dengan huruf atau underscore. Selanjutnya, pengidentifikasi dapat terdiri
dari huruf, angka, underscore karakter, dan lainnya karakter ASCII dari 127 sampai
255. Tabel 3-3 menunjukkan beberapa contoh pengenal sah dan valid.
pengidentifikasi adalah case sensitive. Oleh karena itu, variabel yang bernama
$recipe berbeda dari variabel yang bernama $Recipe, $rEciPe, or $recipE.
pengidentifikasi dapat menjadi setiap panjang. Hal ini menguntungkan karena
memungkinkan programmer untuk secara akurat menjelaskan pengidentifikasi
tujuannya melalui identifikasi nama.
Sebuah nama identifier tidak bisa identik dengan salah satu kata kunci PHP yang
telah ditetapkan. Anda dapat menemukan daftar lengkap dari kata kunci tersebut
dalam lampiran manual PHP.
Variables
Meskipun variabel telah digunakan dalam banyak contoh pada bab ini, konsep
masih belum secara resmi diperkenalkan. Bagian ini melakukannya, memulai
dengan definisi. Sederhananya, variabel merupakan simbol yang dapat
menyimpan nilai yang berbeda pada waktu yang berbeda. Misalnya, Anda
membuat sebuah kalkulator berbasis web mampu melakukan tugas-tugas
matematika. Tentu saja, pengguna akan ingin untuk memasang nilai memilih nya,
sehingga program harus mampu secara dinamis menyimpan nilai tersebut dan
melakukan perhitungan yang sesuai. Pada saat yang sama, programmer
membutuhkan sarana yang mudah untuk mengacu pada nilai pemegang ini dalam
aplikasi. Variabel kedua menyelesaikan tugas.
Pernyataan Variabel
Suatu variabel selalu dimulai dengan tanda dolar, $, yang kemudian diikuti dengan
nama variabel. Nama variabel mengikuti aturan penamaan yang sama seperti
pengidentifikasi. Artinya, nama variabel dapat dimulai dengan salah satu huruf
atau underscore dan dapat terdiri dari huruf, garis bawah, angka, atau karakter
ASCII mulai dari 127 sampai 255. Berikut ini adalah semua variabel yang valid:
$color
$operating_system
$_some_variable
$model
Catatan bahwa variabel adalah case sensitif. Misalnya, variabel berikut dikenakan
mutlak tidak ada hubungannya dengan satu sama lain:
$color
$Color
$COLOR
Menariknya, variabel tidak harus secara eksplisit dinyatakan dalam PHP seperti
yang mereka lakukan dalam Perl. Sebaliknya, variabel dapat dideklarasikan dan
diberi nilai-nilai secara bersamaan. Meskipun demikian, hanya karena Anda dapat
melakukan sesuatu tidak berarti Anda harus. Praktek pemrograman yang baik
Penugasan Nilai
Penugasan dengan nilai hanya melibatkan menyalin nilai dari ekspresi yang
ditugaskan kepada penerima variabel. Ini adalah tipe penugasan yang paling
umum. Beberapa contoh berikut:
$color = "red";
$number = 12;
$age = 12;
$sum = 12 + "15"; // $sum = 27
Perlu diingat bahwa setiap variabel memiliki salinan dari ekspresi yang ditugaskan
untuk itu. Misalnya, $number dan $age memiliki salinan unik mereka sendiri
dengan nilai 12. Jika Anda lebih suka bahwa dua variabel menunjuk ke salinan
yang sama dari nilai, Anda harus menentukan dengan rujukan, diperkenalkan
berikutnya.
Penugasan Rujukan
PHP 4 diperkenalkan kemampuan untuk menetapkan variabel dengan rujukan,
yang pada dasarnya berarti bahwa Anda dapat membuat sebuah variabel yang
mengacu pada konten yang sama sebagai variabel yang lain. Oleh karena itu,
perubahan ke setiap rujukan variabel item tertentu dari isi variabel akan
tercermin antara semua merujuk variabel lain bahwa konten sama. Anda dapat
Rujukan juga memainkan peran penting dalam kedua fungsi argumen dan
mengembalikan nilai, serta dalam pemrograman berorientasi obyek. Bab 4 dan 6
mencakup fitur ini, masing-masing.
Variabel Lokal
Suatu variabel dideklarasikan dalam suatu fungsi yang dianggap lokal.
Artinya, dapat direferensikan hanya dalam fungsi tersebut. Setiap penugasan di
luar fungsi akan dianggap sebagai variabel yang sama sekali berbeda dari yang
terkandung dalam fungsi. Perhatikan bahwa ketika Anda keluar dari fungsi di
mana suatu variabel lokal telah dideklarasikan, bahwa variabel dan nilai yang
sesuai dihancurkan.
Variabel lokal sangat membantu karena mereka menghilangkan
kemungkinan efek samping yang tidak terduga, yang dapat mengakibatkan
variabel secara global dapat diakses yang diubah sengaja atau tidak.
Pertimbangkan properti ini:
$x = 4;
function assignx () {
$x = 0;
printf("\$x inside function is %d <br />", $x);
}
assignx();
Seperti yang anda lihat, dua nilai yang berbeda untuk $x adalah output. Hal ini
karena $x terletak di dalam assignx () fungsi lokal. Memodifikasi nilai $x lokal tidak
berpengaruh pada semua nilai yang terletak di luar fungsi. Pada catatan yang
sama, mengubah $x yang terletak luar fungsi tidak mempunyai pengaruh pada
setiap variabel yang terkandung dalam assignx ().
Fungsi Parameter
Seperti pada banyak bahasa pemrograman lain, dalam PHP, setiap fungsi yang
menerima argumen harus mendeklarasikan argumen-argumen pada fungsi
header. Meskipun argumen-argumen menerima Nilai yang berasal dari luar
fungsi, mereka tidak lagi dapat diakses setelah fungsi telah keluar.
Catatan Bagian ini hanya berlaku untuk parameter yang dikirimkan oleh nilai
dan bukan untuk yang dikirimkan dengan referensi. Parameter yang dikirimkan
dengan acuan memang akan terpengaruh dengan segala perubahan yang dibuat
terhadap parameter dari dalam fungsi. Jika kamu tidak tahu apa artinya ini,
jangan khawatir tentang hal itu karena Bab 4 membahas topik lebih rinci.
Fungsi parameter dideklarasikan setelah nama fungsi dan tanda kurung di dalam.
Mereka dideklarasikan lebih seperti variabel yang khas akan menjadi:
// multiply a value by 10 and return it to the caller
function x10 ($value) {
Variabel Global
Berbeda dengan variabel lokal, variabel global dapat diakses pada setiap bagian
dari program tersebut. Untuk memodifikasi variabel global, namun harus secara
tegas dinyatakan sebagai global pada fungsi di mana ia harus dimodifikasi. Hal ini
dicapai, cukup mudah, dengan menempatkan kata kunci GLOBAL di depan
variabel yang harus dikenal sebagai global. Menempatkan kata kunci ini di depan
sebuah variabel yang sudah ada memberitahu PHP untuk menggunakan variabel
yang mempunyai nama itu. Pertimbangkan contoh:
$somevar = 15;
function addit() {
GLOBAL $somevar;
$somevar++;
echo "Somevar is $somevar";
}
addit();
Nilai yang ditampilkan dari $somevar menjadi 16. Namun, jika Anda adalah untuk
menghilangkan garis ini,
GLOBAL $somevar;
variabel $somevar akan diberi nilai 1 karena $somevar maka akan dianggap lokal
dalam fungsi addit (). Deklarasi lokal Ini akan secara tersirat diatur ke 0 dan
kemudian bertambah 1 untuk menampilkan nilai 1.
Metode alternatif untuk mendeklarasikan variabel untuk menjadi global adalah
dengan menggunakan array $GLOBALS PHP. Meninjau ulang contoh sebelumnya,
Anda dapat menggunakan array ini untuk mendeklarasikan variabel $somevar
menjadi global.
$somevar = 15;
function addit() {
$GLOBALS["somevar"]++;
}
addit();
echo "Somevar is ".$GLOBALS["somevar"];
Ini mengembalikan sebagai berikut:
Variabel Static
Tipe terakhir dari pelingkupan variabel untuk mendiskusikan yang dikenal sebagai
statis. Berbeda dengan variabel yang dideklarasikan sebagai fungsi parameter,
yang dihancurkan pada keluar dari fungsi, sebuah variabel statis tidak kehilangan
nilai ketika keluar fungsi dan masih akan memiliki nilai itu jika fungsi ini dipanggil
lagi. Anda dapat mendeklarasikan sebuah variabel sebagai statis hanya dengan
menempatkan kata kunci STATIS di depan nama variabel:
STATIC $somevar;
Pertimbangkan sebuah contoh:
function keep_track() {
STATIC $count = 0;
$count++;
echo $count;
echo "<br />";
}
keep_track();
keep_track();
keep_track();
Apa yang akan Anda harapkan hasil dari script ini menjadi? Jika variabel $ count
tidak ditunjuk untuk statis (sehingga membuat $ count variabel lokal), hasilnya
akan sebagai berikut:
Pelingkupan statis ini berguna untuk fungsi algoritma. Fungsi algoritma adalah
konsep pemrograman yang kuat di mana fungsi berulang kali menyebut dirinya
sendiri sampai kondisi tertentu terpenuhi. Fungsi algoritma dibahas secara rinci
dalam Bab 4.
Ini mengembalikan daftar variabel serupa dengan berikut ini. Luangkan waktu
sejenak untuk membaca dengan teliti daftar yang dihasilkan oleh kode ini sebagai
dijalankan pada server Windows. Anda akan melihat beberapa variabel ini
kembali dalam contoh yang berikut:
Contoh ini menggambarkan hanya satu dari sembilan variabel array PHP yang
telah ditetapkan. Selanjutnya, bagian ini dikhususkan untuk memperkenalkan
tujuan dan isi dari masing-masing.
Catatan Untuk menggunakan variabel array yang telah ditetapkan, konfigurasi
parameter track_vars harus diaktifkan pada file php.ini. Pada PHP 4,03,
track_vars selalu diaktifkan.
biasanya
POST variabel berikut ini akan dibuat tersedia melalui target script subscribe.php:
$_POST['email'] = "[email protected]";
$_POST['pswd'] = "rainyday";
$_POST['subscribe'] = "subscribe!";
Seperti $_GET, superglobal $_POST secara default satu-satunya cara untuk
mengakses variabel POST. Anda tidak dapat mengacu variabel POST seperti ini:
$email, $pswd, dan $subscribe.
dilakukan melalui fungsi PHP setcookie (). Sebagai contoh, misalkan Anda
menggunakan setcookie () untuk menyimpan cookie bernama example.com
dengan nilai ab2213. Anda kemudian bisa mengambil nilai itu dengan memanggil
$_COOKIE ["example.com"]. Bab 18 memperkenalkan kemampuan PHP
menangani cookie.
melalui GET atau POST. Bab 18 dikhususkan untuk fitur yang tangguh
penanganan-session PHP.
Variabel Variabel
Dalam kesempatan, Anda mungkin ingin menggunakan sebuah variabel yang
isinya dapat ditangani secara dinamis sebagai variabel dalam dirinya sendiri.
Pertimbangkan tugas variabel yang khas:
$recipe = "spaghetti";
Menariknya, Anda dapat memperlakukan nilai spaghetti sebagai variabel dengan
menempatkan tanda dolar kedua di depan nama variabel asli dan lagi
memberikan nilai lain:
$$recipe = "& meatballs";
Hal ini pada dasarnya menugaskan & meatballs ke variabel bernama
spaghetti.
Oleh karena itu, dua berikut potongan dari kode menghasilkan hasil yang
sama:
echo $recipe $spaghetti;
echo $recipe ${$recipe};
Hasil keduanya adalah string spaghetti & meatballs.
Konstan
Sebuah konstanta adalah nilai yang tidak dapat diubah selama eksekusi program.
Konstanta sangat berguna ketika bekerja dengan nilai yang pasti tidak akan
memerlukan modifikasi, seperti pi (3.141592) atau jumlah kaki dalam satu mil
(5280). Setelah konstan telah ditentukan, maka tidak dapat diubah (atau
didefinisikan ulang) pada setiap titik lain dari program tersebut. Konstanta
didefinisikan menggunakan fungsi define ().
Mendefinisikan Konstan
fungsi define () mendefinisikan konstan dengan memberikan nilai ke nama.
Prototipe nya berikut:
boolean define(string name, mixed value [, bool case_insensitive])
Jika parameter opsional case_insensitive disertakan dan ditugaskan TRUE,
referensi setelah konstan akan case sensitive. Perhatikan contoh berikut di mana
PI konstanta matematika didefinisikan:
define("PI", 3.141592);
Konstanta selanjutnya digunakan dalam daftar berikut:
printf("The value of pi is %f", PI);
$pi2 = 2 * PI;
printf("Pi doubled equals %f", $pi2);
Kode ini menghasilkan hasil sebagai berikut:
Ada beberapa poin untuk dicatat tentang daftar sebelumnya. Yang pertama
adalah bahwa referensi konstan tidak diawali dengan tanda dolar. Yang kedua
adalah bahwa Anda tidak bisa mendefinisikan ulang atau tidakmenandai
konstanta setelah didefenisikan (misalnya, 2 * PI), jika Anda perlu untuk
menghasilkan berdasarkan nilai konstan, nilai tersebut harus disimpan dalam
Ekspresi
Ekspresi adalah sebuah ungkapan yang mewakili tindakan tertentu dalam sebuah
program. Semua ekspresi terdiri dari setidaknya satu operand dan satu atau lebih
operator. Beberapa contoh berikut:
$a = 5;
$a = "5";
Operand
Operand adalah input dari sebuah ekspresi. Anda mungkin sudah akrab dengan
manipulasi dan penggunaan dari operan yang tidak hanya melalui perhitungan
matematika sehari-hari, tetapi juga melalui pengalaman pemrograman
sebelumnya. Beberapa contoh dari operan berikut:
$a++; // $a is the operand
$sum = $val1 + val2; // $sum, $val1 and $val2 are operands
Operator
Operator adalah sebuah simbol yang menentukan tindakan tertentu dalam
ekspresi. Banyak operator mungkin akan familiar untuk Anda. Apapun, anda
seharusnya ingat bahwa jenis konversi secara otomatis PHP akan mengkonversi
jenis berdasarkan tipe operator ditempatkan di antara dua operan, yang tidak
selalu terjadi pada bahasa pemrograman lain.
Yang diutamakan dan associativity dari operator adalah karakteristik
penting dari sebuah bahasa pemrograman. Kedua konsep diperkenalkan dalam
bagian ini. Tabel 3-4 berisi daftar lengkap dari semua operator, dipesan dari yang
tertinggi sampai prioritas terendah.
Prioritas Operator
Prioritas Operator merupakan karakteristik dari operator yang menentukan
urutan di mana mereka mengevaluasi operan sekitar mereka. PHP mengikuti
aturan prioritas standar yang digunakan pada kelas matematika sekolah dasar.
Pertimbangkan beberapa contoh:
$total_cost = $cost + $cost * 0.06;
Ini adalah sama seperti penulisan
$total_cost = $cost + ($cost * 0.06);
karena operator perkalian memiliki hak yang lebih tinggi dari operator
penambahan.
Operator associativity
Karakteristik associativity dari operator menentukan bagaimana operasi dari
prioritas yang sama (yaitu, memiliki nilai prioritas yang sama, seperti ditampilkan
pada Tabel 3-3) adalah dievaluasi karena mereka dieksekusi. Associativity dapat
dilakukan pada dua arah, kiri ke kanan atau kanan ke kiri. Associativity kiri-kekanan berarti bahwa berbagai operasi yang membentuk ekspresi dievaluasi dari
kiri ke kanan. Perhatikan contoh berikut:
$value = 3 * 4 * 5 * 7 * 2;
Contoh sebelumnya adalah sama sebagai berikut:
$value = ((((3 * 4) * 5) * 7) * 2);
ekspresi Ini menghasilkan nilai 840 karena operator perkalian (*) adalah
asosiatif kiri-ke-kanan.
Sebaliknya, associativity kanan-ke-kiri mengevaluasi operator dari prioritas
yang sama dari kanan ke kiri:
$c = 5;
print $value = $a = $b = $c;
Contoh sebelumnya adalah sama sebagai berikut:
$c = 5;
$value = ($a = ($b = $c));
Ketika ekspresi ini dievaluasi, variabel $value, $a, $b, dan $c semua akan berisi
nilai 5 karena operator penugasan (=) memiliki associativity kanan-ke-kiri.
Operator Aritmatika
Operator aritmatika ini, tercantum pada Tabel 3-5, melakukan berbagai operasi
matematika dan mungkin akan sering digunakan dalam banyak program PHP
Anda. Untungnya, mereka mudah untuk digunakan.
Kebetulan, PHP menyediakan beragam luas dari fungsi matematika standar yang
mampu melakukan konversi dasar dan menghitung logaritma, akar kuadrat, nilai
geometrik, dan banyak lagi. Periksa buku manual untuk daftar terbaru dari fungsi
ini.
Operator Penugasan
Operator penugasan menetapkan nilai data ke variabel. Bentuk paling sederhana
dari operator penugasan hanya menugaskan beberapa nilai, sementara yang lain
(dikenal sebagai operator penugasan shortcut) melakukan beberapa operasi lain
sebelum melakukan tugas. Tabel 3-6 daftar contoh menggunakan tipe operator.
Operator String
Operator string PHP (lihat Tabel 3-7) menyediakan cara yang mudah di mana
untuk menggabungkan string bersama. Ada dua operator tersebut, termasuk
operator penggabungan (.) dan penugasan operator penggabungan (.=) dibahas
pada bagian sebelumnya.
Catatan Untuk menggabungkan berarti menggabungkan dua atau lebih objek
bersama untuk membentuk satu entitas tunggal.
Operator ini dapat ditempatkan pada kedua sisi dari sebuah variabel, dan sisi di
mana mereka ditempatkan memberikan efek yang sedikit berbeda.
Pertimbangkan hasil dari contoh berikut:
$inv = 15;
$oldInv = $inv--; // Assign $oldInv the value of $inv, then decrement $inv.
$origInv = ++$inv; // Increment $inv, then assign the new $inv value to $origInv.
Seperti yang anda lihat, urutan pada mana operator Increment dan Decrement
digunakan memiliki dampak penting pada nilai dari variabel. Meletakkan operan
dengan salah satu operator ini dikenal sebagai operasi preinkremen dan
predecrement, sementara pasca-penetapan operan dikenal sebagai
postincrement dan operasi postdecrement.
Operator Logika
Sama seperti operator aritmatika, operator logika (lihat Tabel 3-9) mungkin akan
memainkan peran penting pada banyak aplikasi PHP, menyediakan cara untuk
membuat keputusan berdasarkan nilai variabel berganda. Operator logika
memungkinkan untuk mengarahkan aliran program dan sering digunakan dengan
struktur kontrol, seperti if kondisi dan while dan untuk loop.
Operator Logika juga sering digunakan untuk memberikan rincian tentang hasil
dari operasi lainnya, terutama yang mengembalikan nilai:
file_exists("filename.txt") OR echo "File does not exist!";
Salah satu dari dua hasilnya akan muncul:
terdapat file filename.txt
Kalimat " File does not exist!" akan menjadi output
Operator Kesetaraan
Operator Kesetaraan (lihat Tabel 3-10) digunakan untuk membandingkan dua
nilai, pengujian untuk kesetaraan.
Perbandingan Operator
Perbandingan operator (lihat Tabel 3-11), seperti operator logika, menyediakan
metode untuk aliran program langsung melalui pemeriksaan nilai pembanding
dari dua atau lebih variabel.
Bitwise Operator
Bitwise operator memeriksa dan memanipulasi nilai integer pada tingkat bit
individu yang membentuk nilai integer (demikian nama). Untuk memahami
konsep ini, Anda memerlukan setidaknya pengetahuan pengantar representasi
biner dari desimal integer. Tabel 3-12 menyajikan beberapa desimal integer dan
representasi yang berhubungan biner.
Operator bitwise tercantum pada Tabel 3-13 variasi pada beberapa operator
logika tetapi dapat menghasilkan Hasil berbeda secara drastis.
Jika Anda tertarik untuk belajar lebih lanjut tentang pengkodean biner dan
operator bitwise dan mengapa mereka penting, lihat referensi besar secara online
Randall Hyde, "The Art of Assembly Language programming," tersedia di
http://webster.cs.ucr.edu/ .
Interpolasi string
Untuk menawarkan pengembang fleksibilitas maksimal ketika bekerja dengan
nilai string, PHP menawarkan cara untuk kedua interpretasi literal dan kiasan.
Contoh, perhatikan string berikut:
The $animal jumped over the wall.\n
Anda mungkin menganggap bahwa $animal adalah variabel dan yang \ n adalah
karakter baris baru, dan karena itu keduanya harus diartikan yang sesuai. Namun,
bagaimana jika Anda ingin output string tepatnya seperti yang tertulis, atau
mungkin Anda ingin baris baru yang akan diberikan tetapi menginginkan variabel
untuk menampilkan dalam bentuk literal-nya ($ hewan), atau sebaliknya? Semua
variasi yang mungkin dalam PHP, tergantung pada bagaimana string ditutup dan
apakah karakter kunci tertentu di-escape melalui urutan yang telah ditetapkan.
Topik ini adalah fokus dari bagian ini.
Double Quotes
String diapit tanda kutip ganda adalah yang paling umum digunakan dalam skrip
PHP paling karena mereka menawarkan fleksibilitas yang paling tinggi. Hal ini
karena kedua variabel dan Mengeluarkan urutan akan diurai yang sesuai.
Perhatikan contoh berikut:
<?php
$sport = "boxing";
echo "Jason's favorite sport is $sport.";
?>
Contoh ini mengembalikan sebagai berikut:
Single Quotes
Melampirkan string dalam tanda kutip tunggal berguna ketika string harus
diinterpretasikan tepatnya seperti yang tercantum. Ini berarti bahwa kedua
variabel dan keluaran urutan tidak akan diartikan ketika string diuraikan. Contoh,
perhatikan single-quote berikut:
Pada contoh ini, backslash muncul pada akhir string harus lolos, jika tidak,
pengurai PHP akan mengerti bahwa single quote mengikuti adalah untuk diganti.
Namun, jika backslash itu untuk muncul di tempat lain dalam string, tidak akan
ada perlu melarikan diri itu.
Heredoc
Sintaks Heredoc menawarkan cara yang mudah digunakan untuk keluaran
sejumlah besar teks. Daripada pembatasan string dengan tanda kutip ganda atau
tunggal, dua pengidentifikasi sama yang dipekerjakan. Sebuah contoh berikut:
<?php
$website = "http://www.romatermini.it";
echo <<<EXCERPT
<p>Rome's central train station, known as <a href = "$website">Roma
Termini</a>,
was built in 1867. Because it had fallen into severe disrepair in the late 20th
century, the government knew that considerable resources were required to
rehabilitate the station prior to the 50-year <i>Giubileo</i>.</p>
EXCERPT;
?>
Struktur Kontrol
Struktur Kontrol menentukan aliran kode dalam aplikasi, mendefinisikan
karakteristik eksekusi seperti apakah dan berapa kali suatu pernyataan kode
tertentu akan mengeksekusi, serta ketika sebuah blok kode akan menyerahkan
kontrol eksekusi. Struktur ini juga menawarkan cara sederhana untuk
memperkenalkan bagian yang sama sekali baru dari kode (melalui pernyataan
masuknya file) menjadi Script yang sedang dijalankan. Pada bagian ini Anda akan
mempelajari tentang semua struktur kontrol tersebut yang tersedia untuk bahasa
PHP.
Pernyataan kondisional
Pernyataan kondisional memungkinkan program komputer anda untuk merespon
sesuai dengan berbagai input, menggunakan logika untuk membedakan antara
berbagai kondisi berdasarkan nilai input. Fungsi ini sangat dasar untuk pembuatan
perangkat lunak komputer yang seharusnya tidak mengejutkan bahwa berbagai
pernyataan kondisional adalah pokok dari semua bahasa pemrograman utama,
PHP disertakan.
Pernyataan if
Pernyataan if adalah salah satu yang paling umum membangun dari setiap bahasa
pemrograman utama, menawarkan cara yang mudah untuk eksekusi kode
kondisional. Berikut ini adalah sintaks:
if (expression) {
statement
}
Sebagai contoh, misalkan Anda ingin pesan ucapan selamat ditampilkan jika
pengguna menduga nomor rahasia yang telah ditetapkan:
<?php
$secretNumber = 453;
if ($_POST['guess'] == $secretNumber) {
echo "<p>Congratulations!</p>";
}
?>
putus asa pemalas dapat melupakan penggunaan tanda kurung kurawal saat
tubuh kondisional hanya terdiri dari pernyataan tunggal. Berikut adalah revisi dari
contoh sebelumnya:
<?php
$secretNumber = 453;
if ($_POST['guess'] == $secretNumber) echo "<p>Congratulations!</p>";
?>
Catatan Alternatif sintaks penutup tersedia untuk if, while, foreach, for, dan
struktur kontrol switch. Ini melibatkan penggantian pembukaan braket dengan
tanda titik dua (:) dan menggantikan penutupan braket dengan endif;,
endwhile;, endfor;, endforeach;, dan endswitch;, masing-masing. Ada diskusi
mengenai mencela sintaks ini di masa mendatang, meskipun kemungkinan akan
tetap berlaku untuk masa mendatang.
Pernyataan else
Masalah dengan contoh sebelumnya adalah output yang hanya ditawarkan bagi
pengguna yang menduga nomor rahasia. Semua pengguna lain yang tersisa
kekurangan, benar-benar dilecehkan karena sebab mungkin berkaitan dengan
kurangnya kekuatan psikis. Bagaimana jika Anda ingin memberikan tanggapan
yang disesuaikan tidak peduli hasilnya? Untuk melakukannya Anda akan perlu
cara untuk menangani mereka yang tidak bertemu tersebut dengan persyaratan
kondisional if, fungsi dgn mudah ditawarkan dengan cara pernyataan else. Berikut
revisi dari contoh sebelumnya, kali ini menawarkan respon dalam kedua kasus:
<?php
$secretNumber = 453;
if ($_POST['guess'] == $secretNumber) {
echo "<p>Congratulations!!</p>";
} else {
echo "<p>Sorry!</p>";
}
?>
Seperti if, bracket pernyataan else dapat diabaikan jika hanya pernyataan kode
tunggal tertutup.
Pernyataan elseif
Kombinasi if-else bekerja dengan baik dalam "salah satu-atau" situasi-yaitu,
situasi di mana hanya dua hasil yang mungkin tersedia. Tapi bagaimana jika
beberapa hasilnya kemungkinan? Anda akan membutuhkan cara untuk
mempertimbangkan setiap hasil yang mungkin, yang dicapai dengan pernyataan
elseif. Mari kita merevisi contoh rahasia-nomor lagi, kali ini menawarkan pesan
jika menebak pengguna relatif menutup (dalam sepuluh) nomor rahasia:
<?php
$secretNumber = 453;
$_POST['guess'] = 442;
if ($_POST['guess'] == $secretNumber) {
echo "<p>Congratulations!</p>";
} elseif (abs ($_POST['guess'] - $secretNumber) < 10) {
echo "<p>You're getting close!</p>";
} else {
echo "<p>Sorry!</p>";
}
?>
Pernyataan Switch
Anda dapat berpikir dari pernyataan switch sebagai variasi dari kombinasi if-else,
sering digunakan saat Anda perlu membandingkan variabel terhadap sejumlah
besar nilai:
<?php
switch($category) {
case "news":
echo "<p>What's happening around the world</p>";
break;
case "weather":
echo "<p>Your weekly forecast</p>";
break;
case "sports":
echo "<p>Latest sports highlights</p>";
break;
default:
echo "<p>Welcome to my Web site</p>";
}
?>
Catatan adanya pernyataan break pada akhir setiap blok kasus. Jika pernyataan
break tidak ada, semua kasus blok berikutnya akan mengeksekusi sampai sebuah
pernyataan break berada. Sebagai ilustrasi perilaku ini, mari kita asumsikan
Pernyataan Looping
Meskipun variasi pendekatan tersedia, statemen looping adalah perlengkapan
dalam setiap bahasa pemrograman yang luas. Hal tidak mengejutkan karena
mekanisme looping menawarkan cara sederhana untuk menyelesaikan tugas yang
umum dalam pemrograman: mengulang urutan dari instruksi sampai kondisi
tertentu dipenuhi. PHP menawarkan beberapa seperti mekanisme, tidak ada yang
harus mengejutkan jika Anda terbiasa dengan bahasa pemrograman lain.
Pernyataan While
Pernyataan while menetapkan suatu kondisi yang harus dipenuhi sebelum
eksekusi dari kode yang tertanam diakhiri. Sintaks-nya adalah sebagai berikut:
while (expression) {
statements
}
Pada contoh berikut, $count adalah diinisialisasi dengan nilai 1. Nilai dari $count
kemudian kuadrat dan output. Variabel $ count kemudian bertambah 1, dan loop
diulang sampai nilai dari $count mencapai 5.
<?php
$count = 1;
Dengan adanya conditional, maksimum lima baris akan menjadi output dari file
sports.txt, terlepas dari ukurannya.
do...while Statement
pernyataan perulangan Do ... while adalah varian sedangkan do while itu
memverifikasi kondisional loop pada akhir blok, bukan pada awal. Berikut ini
adalah sintaks:
do {
statements
} while (expression);
Baik while dan do ... while adalah fungsi yang sama. Satu-satunya perbedaan yang
nyata adalah bahwa kode tertanam dalam pernyataan while mungkin tidak akan
pernah bisa dijalankan, sedangkan kode yang tertanam dalam pernyataan do...
while selalu akan mengeksekusi setidaknya sekali. Perhatikan contoh berikut:
<?php
$count = 11;
do {
printf("%d squared = %d <br />", $count, pow($count, 2));
} while ($count < 10);
?>
Berikut ini adalah hasilnya:
Pernyataan For
Pernyataan For menawarkan mekanisme looping agak lebih kompleks daripada
while. Berikut ini adalah sintaks:
for (expression1; expression2; expression3) {
statements
}
Ada beberapa aturan yang perlu diingat ketika menggunakan for loop PHP:
Ekspresi pertama, expression1, dievaluasi secara default pada perulangan
pertama dari loop.
Ekspresi kedua, expression2, dievaluasi pada awal setiap iterasi. Ekspresi ini
menentukan apakah looping akan terus berlanjut.
Ekspresi ketiga, expression3, dievaluasi di akhir setiap loop.
Salah satu ekspresi boleh kosong, tujuannya digantikan dengan logika yang
tertanam di dalam blok for.
Dengan adanya aturan dalam pikiran, pertimbangkan contoh berikut, yang
semuanya menampilkan sebagian kilometer/mil kesetaraan grafik:
// Example One
for ($kilometers = 1; $kilometers <= 5; $kilometers++) {
printf("%d kilometers = %f miles <br />", $kilometers, $kilometers*0.62140);
}
// Example Two
Pernyataan foreach
perulangan foreach membangun sintaks yang ahli dalam perulangan melalui
array, menariknya setiap tombol / pasangan nilai dari array sampai semua item ini
diambil atau beberapa lainnya kondisional internal telah dipenuhi. Dua variasi
sintaks yang tersedia, masing-masing disajikan dengan sebuah contoh.
Variasi Sintaks potongan pertama setiap nilai dari array, memindahkan
penunjuk lebih dekat ke akhir dengan perulangan masing-masing. Berikut ini
adalah sintaks:
foreach (array_expr as $value) {
statement
}
Variasi kedua adalah sangat cocok untuk bekerja dengan kedua kunci dan nilai
array. Sintaks berikut:
foreach (array_expr as $key => $value) {
statement
}
Merevisi contoh sebelumnya, anggaplah bahwa array $links berisi link dan judul
link yang sesuai:
$links = array("The Apache Web Server" => "www.apache.org",
"Apress" => "www.apress.com",
"The PHP Scripting Language" => "www.php.net");
Setiap item array terdiri dari kedua kunci dan nilai yang sesuai. Pernyataan
foreach dapat dengan mudah mengupas setiap tombol / pasangan nilai dari array,
seperti ini:
echo "<b>Online Resources</b>:<br />";
foreach($links as $title => $link) {
echo "<a href=\"http://$link\">$title</a><br />";
}
Hasilnya adalah bahwa setiap link tertanam dengan judul masing-masing, seperti
ini:
Ada variasi lain pada metode pengambilan kunci / nilai, yang semuanya
diperkenalkan pada Bab 5.
Melalui penambahan pernyataan goto, fitur ini telah diperluas pada PHP 6 untuk
mendukung label. Ini berarti Anda dapat bisa melompat ke lokasi tertentu di luar
suatu perulangan atau pembangunan kondisional. Sebuah contoh berikut:
<?php
for ($count = 0; $count < 10; $count++)
{
$randomNumber = rand(1,50);
if ($randomNumber < 10)
goto less;
else
echo "Number greater than 10: $randomNumber<br />";
}
less:
echo "Number less than 10: $randomNumber<br />";
?>
Pernyataan Continue
pernyataan continue menyebabkan eksekusi iterasi pengulangan saat ini untuk
mengakhiri dan memulai pada awal perulangan berikutnya. Sebagai contoh,
pelaksanaan berikut saat body akan memulai kembali jika $ username [$ x] adalah
ditemukan memiliki nilai yang hilang:
<?php
$usernames = array("grace","doris","gary","nate","missing","tom");
for ($x=0; $x < count($usernames); $x++) {
if ($usernames[$x] == "missing") continue;
printf("Staff member: %s <br />", $usernames[$x]);
}
?>
Hal ini menghasilkan output sebagai berikut:
Pernyataan include ()
pernyataan include () akan mengevaluasi dan menyertakan file ke lokasi di mana
itu disebut. Memasukkan file menghasilkan hasil yang sama seperti menyalin data
dari file tertentu ke lokasi di mana pernyataan tersebut muncul. Prototipe nya
berikut:
include(/path/to/filename)
Seperti pernyataan print dan echo, Anda memiliki pilihan untuk
menghilangkan tanda kurung saat menggunakan include (). Sebagai contoh, jika
Anda ingin menyertakan serangkaian fungsi standar dan variabel konfigurasi,
Anda bisa menempatkan mereka ke dalam sebuah file terpisah (dipanggil
init.inc.php , misalnya), dan kemudian include file berada di atas setiap Script
PHP, seperti ini:
<?php
include "/usr/local/lib/php/wjgilmore/init.inc.php";
/* the script continues here */
?>
Anda juga dapat mengeksekusi pernyataan kondisional include (). Sebagai
contoh, jika pernyataan include () ditempatkan dalam sebuah pernyataan jika, file
akan disertakan hanya if pernyataan if di mana ia terlampir bernilai true. Salah
satu kekhasan tentang penggunaan include () dalam sebuah kondisional adalah
bahwa harus diapit pada pernyataan blok tanda kurung kurawal atau dalam
alternatif pernyataan penutup. Pertimbangkan perbedaan sintaks antara kedua
potongan kode berikut. Yang pertama menyajikan kesalahan menggunakan
pernyataan kondisional include () karena kurangnya penutup blok yang benar:
<?php
if (expression)
include ('filename');
else
include ('another_filename');
?>
Sebaliknya, pernyataan PHP harus diapit dengan tag lepas yang benar, seperti
yang ditunjukkan di sini:
<?php
echo "this is an invalid include file";
?>
Tip Setiap kode ditemukan dalam sebuah file yang disertakan akan mewarisi
lingkup variabel lokasi dari pemanggil tersebut.
Memerlukan File
Untuk sebagian besar, require () beroperasi seperti include (), termasuk template
ke dalam file di mana memanggil require () yang terletak. Prototipe nya berikut:
require (filename)
Namun, ada dua perbedaan penting antara require () dan include (). Pertama, file
akan dimasukkan dalam script di mana require () membangun muncul, terlepas
dari mana require () ini terletak. Sebagai contoh, jika require () ditempatkan
dalam sebuah pernyataan if yang false, file akan dimasukkan pula.
Tip URL dapat digunakan dengan require() jika allow_url_fopen diaktifkan,
yang secara default itu.
kedua Perbedaan yang penting adalah eksekusi script akan berhenti jika
require () gagal, padahal mungkin terus dalam kasus sebuah include (). Satu
kemungkinan penjelasan untuk kegagalan pernyataan require () adalah jalan
target kesalahan yang dirujuk.
masalah, terkadang Anda tidak ingin variabel diubah dalam file yang disertakan
untuk ditimpa dengan masuknya dari file yang sama. masalah Lain yang timbul
adalah berbenturan dari nama fungsi seharusnya mereka ada dalam file
penyertaan. Anda dapat memecahkan masalah ini dengan fungsi require_once ().
Prototipe nya sebagai berikut:
require_once (filename)
fungsi require_once () memastikan bahwa penyertaan file disertakan hanya
sekali dalam script anda. Setelah require_once () ditemui, setiap upaya berikutnya
untuk menyertakan file yang sama akan diabaikan.
Di samping prosedur verifikasi dari require_once (), semua aspek lain dari
fungsi ini adalah sama seperti untuk require ().
Ringkasan
Meskipun materi yang disajikan di sini tidak begitu mewah sebagai bahan
pada bab berikutnya, ini sangat berharga untuk kesuksesan Anda sebagai
programmer PHP karena semua fungsi berikutnya didasarkan pada pembangunan
blok-blok. Ini akan segera menjadi jelas.
Bab berikutnya adalah dikhususkan untuk pembangunan dan pemanggilan
fungsi, penggunaan ulang dari potongan kode yang ditujukan untuk melakukan
tugas tertentu. Materi ini dimulai Anda menyusuri path yang diperlukan untuk
mulai membangun modular, aplikasi PHP yang dapat digunakan kembali.
CHAPTER 4
Functions
Pemrograman komputer yang ada dalam rangka untuk mengotomatisasi segala
macam tugas, dari penghitungan pembayaran hak tanggungan untuk menentukan
seseorang setiap hari merekomendasikan asupan kalori. Namun, sebagai tugas ini
tumbuh semakin kompleks, Anda akan sering menemukan mereka meliputi tugas
yang sering berulang lainnya. Sebagai contoh, sebuah aplikasi e-commerce
mungkin perlu memvalidasi alamat e-mail pada halaman yang berbeda, seperti
ketika seorang pengguna baru mendaftar untuk menggunakan situs Web, ketika
seseorang ingin menambahkan review produk, atau ketika pengunjung mendaftar
untuk berlangganan berita. Ekspresi reguler digunakan untuk memvalidasi alamat
e-mail yang cukup kompleks, oleh karena itu akan menjadi cocok untuk
memeliharanya dalam satu lokasi daripada menanamkan ke banyak halaman,
terutama jika perlu dimodifikasi dengan account untuk domain baru (seperti.
museum).
Syukurlah, konsep dari mewujudkan proses berulang-ulang dalam bagian
bernama dari kode dan kemudian memanggil nama ini saat diperlukan telah lama
menjadi komponen kunci bahasa komputer modern. Seperti bagian dari kode
yang dikenal sebagai fungsi, dan memberi Anda kemudahan dari point tunggal
acuan jika Proses ini mendefinisikan memerlukan perubahan di masa depan, yang
sangat mengurangi kedua kemungkinan kesalahan pemrograman dan overhead
perawatan. Dalam bab ini, Anda akan mempelajari semua tentang fungsi PHP,
termasuk cara membuat dan memanggil mereka, melewati input untuk mereka,
mengembalikan kedua nilai tunggal dan ganda ke pemanggil, serta membuat dan
meliputi fungsi perpustakaan. Selain itu, Anda akan belajar tentang kedua fungsi
rekursif dan variabel.
Jika Anda ingin menampilkan hasil fungsi, Anda dapat melewati memberikan nilai
ke variabel, seperti ini:
<?php
echo pow(5,3);
?>
Jika Anda ingin menampilkan hasil fungsi dalam string yang lebih besar, Anda
perlu menggabungkannya seperti ini:
echo "Five raised to the third power equals ".pow(5,3).".";
Atau mungkin lebih tegas mengungkapkan, anda dapat menggunakan printf ():
printf("Five raised to the third power equals %d.", pow(5,3));
Tip Anda dapat menelusuri daftar fungsi besar PHP dengan mengunjungi situs
resmi PHP di http://www.php.net/ dan membaca dengan teliti dokumentasi. Di
sana Anda akan menemukan tidak hanya definisi dan contoh untuk setiap fungsi
yang diuraikan oleh Library, tetapi komentar pembaca berkaitan dengan
penggunaan mereka. Jika Anda mengetahui nama fungsi sebelumnya, Anda bisa
langsung ke halaman fungsi dengan menambahkan nama fungsi ke dalam akhir
URL. Sebagai contoh, jika Anda ingin mempelajari lebih lanjut tentang fungsi
pow (), pergi ke http://www.php.net/pow.
Meskipun PHP sangat luas berbagai macam dari fungsi library adalah manfaat
yang luar biasa untuk siapa pun berusaha menghindari menciptakan kembali
kemudi programatis, cepat atau lambat Anda perlu melampaui apa yang
ditawarkan dalam distribusi standar, yang berarti Anda harus membuat fungsi
kustom atau bahkan seluruh fungsi perpustakaan. Untuk melakukannya, Anda
harus mendefinisikan fungsi menggunakan template yang telah ditetapkan,
seperti:
function functionName(parameters)
{
function-body
}
Contoh, perhatikan fungsi berikut, generateFooter(), dimana output halaman
footer:
function generateFooter()
{
echo "Copyright 2007 W. Jason Gilmore";
}
Fungsi ini menerima dua parameter, secara tepat bernama $price dan $tax,
yang digunakan dalam perhitungan. Walaupun parameter ini dimaksudkan untuk
menjadi poin mengambang, karena mengetik lemah PHP, tidak mencegah Anda
melewati pada variabel dari setiap tipe data, tapi hasilnya mungkin tidak akan apa
yang Anda harapkan. Selain itu, Anda diperbolehkan untuk mendefinisikan sedikit
atau banyak parameter yang Anda anggap perlu, tidak ada bahasa dikenakan
kendala dalam hal ini.
Setelah didefinisikan, Anda kemudian dapat memanggil fungsi seperti yang
ditunjukkan di bagian sebelumnya. Sebagai contoh, fungsi calcSalesTax () akan
dipanggil seperti:
calcSalesTax(15.00, .075);
Tentu saja, Anda tidak terikat untuk mengirimkan nilai statis ke fungsi. Anda
juga bisa mengirimkan variabel seperti ini:
<?php
$pricetag = 15.00;
$salestax = .075;
calcSalesTax($pricetag, $salestax);
?>
Saat Anda melewatkan argumen dengan cara ini, ini dipanggil melewati nilai. Ini
berarti bahwa setiap perubahan yang dibuat terhadap nilai dalam ruang lingkup
fungsi diabaikan di luar fungsi. Jika Anda ingin perubahan ini akan disajikan di luar
lingkup fungsi, Anda dapat melewatkan argumen dengan rujukan, diperkenalkan
berikutnya.
Catatan Anda tidak perlu perlu mendefinisikan fungsi sebelum ini dipanggil
karena PHP membaca semua script ke dalam mesin sebelum eksekusi. Oleh
karena itu, Anda sebenarnya bisa memanggil calcSalesTax () sebelum itu
didefinisikan, meskipun praktik sembrono seperti itu tidak dianjurkan.
Jika argumen pilihan berganda ditentukan, Anda selektif dapat memilih yang
mana yang diteruskan. Pertimbangkan contoh ini:
function calculate($price, $price2="", $price3="")
{
echo $price + $price2 + $price3;
}
Anda kemudian dapat memanggil calculate() , melalui parameter $price dan
$price3, seperti:
calculate(10, "", 3);
Ini mengembalikan nilai berikut:
Pernyataan return ()
Pernyataan return() mengembalikan setiap nilai berikutnya belakang untuk
pemanggil fungsi, mengembalikan kontrol program belakang untuk lingkup
pemanggil dalam proses tersebut. Jika return () dipanggil dari dalam lingkup
global, eksekusi skrip dihentikan. Merevisi lagi fungsi calcSalestax (), misalkan
anda tidak ingin langsung echo total penjualan belakang ke pengguna pada saat
perhitungan, tetapi ingin mengembalikan nilai untuk memanggil blok:
function calcSalesTax($price, $tax=.0675)
{
$total = $price + ($price * $tax);
return $total;
}
Setelah penggunaan list() mengeksekusi, $red, $blue, dan $green yang akan
ditugaskan merah, biru, dan hijau, masing-masing.
Membangun konsep yang ditunjukkan pada contoh sebelumnya, Anda
dapat membayangkan bagaimana tiga nilai persyaratan yang mungkin
dikembalikan dari menggunakan fungsi list():
<?php
function retrieveUserProfile()
{
$user[] = "Jason";
$user[] = "[email protected]";
$user[] = "English";
return $user;
}
list($name, $email, $language) = retrieveUserProfile();
echo "Name: $name, email: $email, language: $language";
?>
Fitur ini cukup berguna dan akan digunakan berulang kali dalam buku ini
Fungsi algoritma
Fungsi algoritma, atau fungsi yang memanggil diri mereka, menawarkan
nilai praktis yang cukup untuk programmer dan digunakan untuk membagi
masalah yang kompleks menjadi kasus sederhana, menegaskan hal itu hingga
masalah teratasi.
Hampir setiap contoh rekursi perkenalan melibatkan perhitungan faktorial.
Mari kita lakukan sesuatu yang lebih praktis dan membuat kalkulator pembayaran
pinjaman. Secara khusus, contoh berikut menggunakan rekursi untuk membuat
jadwal pembayaran, memberitahu Anda jumlah pokok dan bunga yang diperlukan
setiap pembayaran angsuran untuk melunasi pinjaman. Fungsi rekursif,
amortizationTable (), diperkenalkan pada daftar 4-1. Yang diperlukan sebagai
input empat argumen: $pNum, yang menunjukkan jumlah pembayaran; $
periodicPayment, yang mengusung total pembayaran bulanan; $balance, yang
menandakan saldo pinjaman yang tersisa, dan $monthlyInterest, yang
menentukan tingkat bunga persentase per bulan. Isi ini ditunjuk atau ditentukan
pada skrip yang tercantum pada Listing 4-2. Listing 4-1. Fungsi Kalkulator
Pembayaran, amortizationTable ().
<?php
function amortizationTable($pNum, $periodicPayment, $balance,
$monthlyInterest)
{
// Calculate payment interest
$paymentInterest = round($balance * $monthlyInterest, 2);
// Calculate payment principal
$paymentPrincipal = round($periodicPayment - $paymentInterest, 2);
// Deduct principal from remaining balance
<?php
// Loan balance
$balance = 10000.00;
// Loan interest rate
$interestRate = .0575;
// Monthly interest rate
$monthlyInterest = $interestRate / 12;
// Term length of the loan, in years.
$termLength = 5;
// Number of payments per year.
$paymentsPerYear = 12;
// Payment iteration
$paymentNumber = 1;
// Determine total number payments
$totalPayments = $termLength * $paymentsPerYear;
Function Libraries
Programmer Hebat yang malas, dan programmer malas berpikir dalam hal
penggunaan kembali. Fungsi menawarkan cara yang bagus untuk menggunakan
kembali kode dan biasanya secara bersama dirakit menjadi library dan kemudian
berulang kali digunakan kembali dalam aplikasi yang serupa. Library PHP dibuat
melalui penggabungan sederhana dari definisi fungsi dalam satu file, seperti ini:
<?php
function localTax($grossIncome, $taxRate) {
// function body here
}
function stateTax($grossIncome, $taxRate, $age) {
// function body here
}
function medicare($grossIncome, $medicareRate) {
// function body here
}
?>
Simpan Library ini, sebaiknya menggunakan konvensi penamaan yang jelas akan
menunjukkan kegunaannya, seperti taxes.library.php. Namun Jangan menyimpan
file ini dalam dokumen root server menggunakan ekstensi yang akan
menyebabkan server Web melewati isi file tidak diuraikan. Melakukan hal itu
membuka kemungkinan bagi pengguna untuk memanggil file dari browser dan
memeriksa kode, yang mungkin berisi data sensitif. Anda dapat menyisipkan file
ini ke dalam skrip dengan menggunakan include (), include_once (), require (),
Ringkasan
Bab ini berkonsentrasi pada salah satu dari blok pembangun dasar dari
bahasa pemrograman modern-hari: penggunaan kembali melalui pemrograman
fungsional. Anda belajar bagaimana membuat dan memanggil fungsi,
menyampaikan informasi ke dan dari fungsi blok, fungsi sarang, dan membuat
kedua fungsi rekursif dan variabel. Akhirnya, Anda belajar bagaimana fungsi
keseluruhan bersama seperti library dan meliputi mereka ke dalam script yang
diperlukan.
Bab berikutnya memperkenalkan fitur array PHP, mencakup petak bahasa
yang luas tentang manajemen array dan kemampuan manipulasi.
CHAPTER 5
Arrays
Sebagian besar waktu Anda sebagai seorang programmer dihabiskan bekerja
dengan mengatur data. Beberapa contoh set data meliputi nama semua karyawan
di sebuah perusahaan; presiden AS dan tanggal lahir yang sesuai mereka, dan
tahun-tahun antara tahun 1900 dan 1975. Pada kenyataannya, bekerja dengan
mengatur data sangat umum bahwa sebuah cara untuk mengelola kelompokkelompok dalam kode adalah fitur umum dari semua bahasa pemrograman
utama. Dalam bahasa PHP, fitur ini dikenal sebagai array, yang menawarkan cara
yang ideal untuk menyimpan, memanipulasi, menyortir, dan mengambil
kumpulan data.
Bab ini memperkenalkan array dan berbagai bahasa yang mengesankan
dari fungsi yang digunakan untuk bekerja dengan mereka. Khususnya Anda akan
belajar bagaimana untuk melakukan hal berikut:
Membuat array
Output array
uji array
Menambah dan menghapus elemen array
Mencari elemen array
Melintasi array
Menentukan ukuran array dan keunikan elemen
Urutkan array
Menggabungkan, irisan, menyambung, dan memotong array
Sebelum memulai gambaran fungsi ini, mari kita sejenak untuk secara formal
mendefinisikan sebuah array dan meninjau beberapa konsep dasar tentang
bagaimana PHP menganggap penting datatype ini.
Kunci asosiatif secara logika dikenakan hubungan langsung ke nilai yang sesuai.
Pemetaan array associatively sangat mudah ketika menggunakan nilai indeks
angka tidak masuk akal. Misalnya, Anda mungkin ingin membuat array yang peta
negara singkatan untuk nama mereka, seperti ini: OH/Ohio, PA/Pennsylvania, dan
NY/New York. Menggunakan sintaks PHP, ini mungkin terlihat seperti berikut:
$states = array("OH" => "Ohio", "PA" => "Pennsylvania", "NY" => "New York")
Anda bisa kemudian mengacu Ohio seperti ini:
$states["OH"]
Ini mungkin juga untuk membuat array dari array, yang dikenal sebagai
array multidimensi. Sebagai contoh, Anda bisa menggunakan array multidimensi
untuk menyimpan informasi negara AS. Menggunakan sintaks PHP, mungkin
terlihat seperti ini:
$states = array (
"Ohio" => array("population" => "11,353,140", "capital" => "Columbus"),
"Nebraska" => array("population" => "1,711,263", "capital" => "Omaha")
);
Logikanya Anda akan memerlukan cara untuk melintasi array. Ketika Anda
akan belajar seluruh bab ini, PHP menawarkan banyak cara untuk melakukannya.
Terlepas dari apakah Anda menggunakan kunci asosiatif atau angka, perlu diingat
bahwa semua bergantung pada penggunaan fitur utama yang dikenal sebagai
pointer array. Tindakan pointer array seperti bookmark, memberitahu Anda posisi
dari array yang Anda saat ini periksa. Anda tidak akan bekerja dengan pointer
array secara langsung, melainkan akan melintasi array menggunakan baik fitur
bahasa built-in atau fungsi. Namun, ini berguna untuk memahami konsep dasar.
Membuat Array
Tidak seperti bahasa lainnya, PHP tidak mengharuskan Anda menetapkan ukuran
suatu array pada waktu penciptaan. Sebenarnya, karena itu bahasa yang bebas
diketik, PHP bahkan tidak mengharuskan Anda mendeklarasikan array sebelum
menggunakannya, walaupun Anda bebas untuk melakukannya. Setiap
pendekatan diperkenalkan di bagian ini, dimulai dengan berbagai formal. Masingmasing elemen dari sebuah array PHP direferensi dengan melambangkan elemen
antara sepasang kurung kotak. Karena tidak ada batasan ukuran pada array, Anda
dapat membuat array sederhana dengan membuat referensi untuk itu, seperti ini:
$state[0] = "Delaware";
Anda kemudian dapat menampilkan elemen pertama dari array $ state seperti ini:
echo $state[0];
Sebagai tambahan Nilai dapat ditambahkan dengan tiap pemetaan nilai baru
untuk indeks array, seperti ini:
$state[1] = "Pennsylvania";
$state[2] = "New Jersey";
...
$state[49] = "Hawaii";
Menariknya, jika Anda berniat untuk nilai indeks menjadi numerik dan Ascending,
Anda dapat menghilangkan nilai indeks pada saat penciptaan:
$state[] = "Pennsylvania";
$state[] = "New Jersey";
...
$state[] = "Hawaii";
Membuat array asosiatif dengan cara ini sama mudahnya selain itu kunci selalu
diperlukan. Contoh berikut membuat sebuah array yang sesuai negara bagian AS
nama-nama dengan tanggal mereka masuk kedalam Persatuan:
$state["Delaware"] = "December 7, 1787";
$state["Pennsylvania"] = "December 12, 1787";
$state["New Jersey"] = "December 18, 1787";
...
$state["Hawaii"] = "August 21, 1959";
pembangunan array (), yang akan didiskusikan, adalah secara fungsional sama
tetapi caranya agak lebih formal untuk membuat array.
Konstruksi ini dapat sangat berguna ketika Anda mengekstrak informasi dari
database atau file. Misalnya, Anda ingin format dan output informasi dibaca dari
file teks bernama users.txt. Setiap baris dari file tersebut berisi informasi
pengguna, termasuk nama, pekerjaan, dan warna favorit dengan masing-masing
item dipisahkan oleh baris vertikal. Sebuah garis yang khas akan terlihat seperti
berikut:
Nino Sanzi|professional golfer|green
Menggunakan list (), sebuah loop sederhana bisa membaca setiap baris,
menetapkan setiap potongan data ke variabel, dan format dan menampilkan data
yang diperlukan. Berikut adalah bagaimana Anda dapat menggunakan list () untuk
membuat penempatan berbagai variabel secara simultan:
// Open the users.txt file
$users = fopen("users.txt", "r");
// While the EOF hasn't been reached, get next line
while ($line = fgets($users, 4096)) {
// use explode() to separate each piece of data.
list($name, $occupation, $color) = explode("|", $line);
// format and output the data
printf("Name: %s <br />", $name);
printf("Occupation: %s <br />", $occupation);
printf("Favorite color: %s <br />", $color);
}
fclose($users);
Setiap baris dari file users.txt akan dibaca dan diformat sama dengan ini:
Meninjau contoh, list () tergantung pada fungsi explode() untuk memecah setiap
baris menjadi tiga unsur, dimana explode() ini dengan menggunakan baris vertikal
sebagai unsur pembatas. (fungsi explode() secara resmi diperkenalkan pada Bab
9.). Unsur-unsur ini kemudian ditugaskan ke $name, $occupation, dan $color.
Pada point itu, ini hanya masalah format untuk menampilkan ke browser.
$even = range(0,20,2);
// $even = array(0,2,4,6,8,10,12,14,16,18,20);
function range ()juga dapat digunakan untuk urutan karakter. Misalnya, Anda
ingin membuat sebuah array yang terdiri dari huruf A sampai F:
$letters = range("A","F");
// $letters = array("A,","B","C","D","E","F");
Catatan Sebuah antrian tradisional adalah struktur data yang mana elemen
dihilangkan dalam urutan yang sama di mana mereka dimasukkan, yang dikenal
sebagai pertama-dalam-pertama-keluar atau FIFO. Sebaliknya, susunan adalah
struktur data yang mana elemen dihilangkan dalam urutan berlawanan dengan
yang mana mereka dimasukkan, yang dikenal sebagai terakhir-dalam-pertamakeluar, atau LIFO.
Melintasi Array
Kebutuhan untuk perjalanan seluruh array dan mengambil berbagai kunci, nilai,
atau keduanya adalah umum, sehingga tidak heran PHP menawarkan berbagai
fungsi yang sesuai untuk kebutuhan ini. Banyak fungsi ini melakukan tugas ganda:
mengambil kunci atau nilai yang berada pada penunjuk lokasi saat ini, dan
memindahkan penunjuk ke lokasi yang sesuai berikutnya. Fungsi-fungsi ini
diperkenalkan di bagian ini.
next($capitals);
}
Hasilnya adalah bahwa setiap nilai pada array yang dijalankan melalui fungsi
strip_tags (), yaitu menghasilkan tag HTML dan PHP tidak dihapus dari nilai. Tentu
saja, penambahan input memeriksa akan diperlukan, tetapi ini seharusnya cukup
untuk menggambarkan kegunaan array_walk ().
Contoh berikut menghitung baik nilai skalar dan nilai-nilai array yang ditemukan di
$location:
$locations = array("Italy","Amsterdam",array("Boston","Des Moines"),"Miami");
echo count($locations,1);
Anda mungkin menggaruk kepala Anda di hasil ini karena tampaknya ada hanya
lima elemen dalam array. Entitas array memegang Boston dan Des Moines
dihitung sebagai item, sama seperti isinya adalah.
Mengurutkan Array
Yang pasti, pengurutan data adalah topik utama dari ilmu komputer. Siapa pun
yang mengambil kelas level pemrograman pemula sangat menyadari algoritma
pengurutan seperti gelembung, menumpuk, kulit, dan cepat. Topik ini
membangun kepalanya begitu sering selama tugas pemrograman sehari-hari
bahwa proses penyortiran data lebih umum seperti menciptakan kondisional if
atau while loop. PHP memfasilitasi proses tersebut dengan menawarkan banyak
fungsi yang berguna yang mampu menyortir array dalam berbagai tata krama.
Fungsi Mereka diperkenalkan pada bagian ini.
Tip Secara default, fungsi menyortir PHP seperti yang sesuai dengan aturan
yang ditetapkan oleh bahasa Inggris. Jika Anda perlu untuk menyortir dalam
bahasa lain, misalnya Perancis atau Jerman, Anda harus mengubah standar
perilaku dengan pengaturan lokasi Anda menggunakan fungsi setlocale ().
Pertimbangkan sebuah contoh. Misalnya anda ingin mengurutkan nilai ujian dari
terendah hingga tertinggi:
Hasilnya terlihat seperti ini:
$grades = array(42,98,100,100,43,12);
sort($grades);
print_r($grades);
Tentu saja tidak apa yang mungkin Anda harapkan, kan? natsort () berfungsi
menyelesaikan dilema ini, menyortir array dalam urutan yang Anda harapkan,
seperti:
<?php
$dates = array('10-10-2003', '2-17-2002', '2-16-2003',
'1-01-2005', '10-10-2004');
sort($dates);
echo "<p>Sorting the array using the sort() function:</p>";
print_r($dates);
natsort($dates);
echo "<p>Sorting the array using the natsort() function: </p>";
print_r($dates);
function DateSort($a, $b) {
// If the dates are equal, do nothing.
if($a == $b) return 0;
// Disassemble dates
list($amonth, $aday, $ayear) = explode('-',$a);
list($bmonth, $bday, $byear) = explode('-',$b);
// Pad the month with a leading zero if leading number not present
$amonth = str_pad($amonth, 2, "0", STR_PAD_LEFT);
$bmonth = str_pad($bmonth, 2, "0", STR_PAD_LEFT);
// Pad the day with a leading zero if leading number not present
$aday = str_pad($aday, 2, "0", STR_PAD_LEFT);
$bday = str_pad($bday, 2, "0", STR_PAD_LEFT);
// Reassemble dates
$a = $ayear . $amonth . $aday;
$b = $byear . $bmonth . $bday;
// Determine whether date $a > $date b
return ($a > $b) ? 1 : -1;
}
usort($dates, 'DateSort');
echo "<p>Sorting the array using the user-defined DateSort() function: </p>";
print_r($dates);
?>
Penggabungan Array
fungsi array_merge () menggabungkan array bersama-sama, mengembalikan
tunggal, array kesatuan. Menghasilkan Array akan dimulai dengan parameter
Jika sebuah array input terdiri sebuah kunci string yang sudah ada dalam
menghasilkan array, bahwa kunci / nilai pasangan akan menimpa entri yang sudah
ada sebelumnya. Perilaku ini tidak berlaku untuk kunci angka, dalam hal ini kunci /
nilai pasangan akan ditambahkan ke array. Sebuah contoh berikut:
$face = array("J","Q","K","A");
$numbered = array("2","3","4","5","6","7","8","9");
$cards = array_merge($face, $numbered);
shuffle($cards);
print_r($cards);
Ini mengembalikan sesuatu sepanjang baris berikut (hasil Anda akan bervariasi
karena shuffle):
Catatan bahwa Kunci John sekarang menunjuk ke sebuah array berindeks yang
terdiri dari dua nilai.
$abbreviations = array("AL","AK","AZ","AR");
$states = array("Alabama","Alaska","Arizona","Arkansas");
$stateMap = array_combine($abbreviations,$states);
print_r($stateMap);
Catatan bahwa array_intersect () menganggap dua item yang sama hanya jika
mereka juga berbagi datatype yang sama.
$array1 = array("OH" => "Ohio", "CA" => "California", "HI" => "Hawaii");
$array2 = array("50" => "Hawaii", "CA" => "California", "OH" => "Ohio");
$array3 = array("TX" => "Texas", "MD" => "Maryland", "OH" => "Ohio");
$intersection = array_intersect_assoc($array1, $array2, $array3);
print_r($intersection);
ini mengembalikan sebagai berikut :
Catatan bahwa Hawaii tidak dikembalikan karena kunci yang sesuai pada $array2
adalah 50 bukan HI (seperti yang terjadi pada dua array lainnya).
$cards = array("jh","js","jd","jc","qh","qs","qd","qc",
"kh","ks","kd","kc","ah","as","ad","ac");
// shuffle the cards
shuffle($cards);
print_r($positions);
Ini mengembalikan sesuatu sepanjang baris berikut (hasil Anda akan
bervariasi karena shuffle):
Ini mengembalikan sebagi berikut (hasil Anda akan bervariasi karena shuffle):
Rangkuman
Array memainkan peran yang sangat diperlukan dalam pemrograman dan
di mana-mana pada setiap jenis aplikasi yang bisa dibayangkan, berbasis web atau
tidak. Tujuan bab ini adalah untuk membawa Anda sampai dengan kecepatan
mengenai banyak fungsi PHP yang akan membuat hidup pemrograman Anda jauh
lebih mudah karena Anda menangani dengan array tersebut.
Bab selanjutnya berfokus pada topik lain yang sangat penting:
pemrograman berorientasi objek. Topik ini memiliki peran yang sangat khusus
pada PHP 5 karena proses ini sepenuhnya didesain ulang untuk rilis utama.
BAB 6
Berorientasi Objek PHP
Sementara untuk banyak bahasa berorientasi objek hanyalah masalah saja,
dibutuhkan waktu beberapa tahun sebelum fitur tersebut telah dimasukkan ke
dalam PHP. Namun awal terjun dalam menambahkan fitur berorientasi objek
untuk bahasa dianggap oleh banyak orang menjadi upaya buruk yang terbaik.
Walaupun sangat dasar tempat pemrograman berorientasi obyek (OOP)
ditawarkan pada versi 4, beberapa kekurangan yang ada, meliputi antara lain:
Sebuah metodologi mereferensikan object yang tidak lazim
Tidak ada cara untuk mengatur lingkup (publik, private, protected, abstrak)
bidang dan metode
Tidak ada standar konvensi untuk penamaan konstruktor
Tidak adanya objek perusak
Kurangnya fitur objek-kloning
Kurangnya dukungan untuk antarmuka
Catatan Sementara ini dan bab berikut berfungsi untuk menyediakan Anda
dengan pengenalan yang luas untuk fitur PHP OOP, perawatan menyeluruh dari
konsekuensi mereka untuk pengembang PHP ini sebenarnya layak untuk sebuah
buku secara keseluruhan. Secara mudah, Matt Zandstra's Objek PHP, Pola, dan
Praktek, Edisi Kedua (Apress, 2007) meliputi topik secara detail yang cukup,
disertai dengan pengenalan menarik untuk menerapkan pola desain dengan PHP
dan gambaran alat pembangunan penting seperti Phing, PEAR, dan
phpDocumentor.
Keuntungan OOP
Kelahiran pemrograman berorientasi objek merupakan suatu perubahan
paradigma utama pada strategi pengembangan, memusatkan perhatian pada
aplikasi data daripada logika tersebut. Untuk kata lain, OOP menggeser fokus dari
kegiatan prosedur sebuah program terhadap entitas kehidupan nyata pada
akhirnya model. Hasilnya adalah sebuah aplikasi yang mirip dengan dunia di
sekitar kita.
Bagian ini membahas tiga konsep dasar OOP: enkapsulasi, pewarisan, dan
polimorfisme. Bersama, ketiga ideal menjadi dasar untuk model pemrograman
yang paling kuat masih dirancang.
Enkapsulasi
Pemrogram menikmati membedah segala hal dan belajar bagaimana semua
potongan-potongan kecil bekerja sama. Meski menyenangkan, untuk mencapai
seperti pengetahuan yang mendalam dari item bagian pekerjaan tidak di
perlukan. Misalnya, jutaan orang menggunakan komputer setiap hari, tetapi
sedikit yang tahu bagaimana itu sesungguhnya bekerja. Ide yang sama berlaku
untuk kendaraan bermotor, microwave, dan setiap jumlah item lainnya. Kita
dapat pergi dengan ketidaktahuan tersebut melalui penggunaan antarmuka.
Sebagai contoh, Anda tahu memutar pengatur radio memungkinkan Anda untuk
mengubah stasiun radio; tidak apa kenyataan bahwa apa yang Anda benar-benar
lakukan adalah memberitahu radio untuk mendengarkan sinyal yang
ditransmisikan pada frekuensi tertentu, prestasi dilakukan menggunakan sebuah
demodulator. Kegagalan untuk memahami proses ini tidak mencegah Anda
menggunakan radio karena antarmuka membutuhkan perawatan untuk
menyembunyikan rincian seperti itu. Praktek memisahkan pengguna dari bagian
pekerjaan sebenarnya dari aplikasi melalui antarmuka dikenal sebagai
enkapsulasi.
Pemrograman berorientasi obyek mempromosikan konsep yang sama
menyembunyikan kerja bagian dalam aplikasi dengan menerbitkan yang
didefinisikan dengan baik antarmuka dari tiap komponen aplikasi dapat diakses.
Daripada terjebak pada rincian mengerikan, pengembang OOP-berpikiran desain
masing-masing komponen aplikasi sehingga mandiri dari yang lain, yang tidak
hanya mendorong penggunaan kembali tetapi juga memungkinkan pengembang
untuk menyusun komponen-komponen seperti puzzle daripada kuat menyerang,
atau Beberapa, mereka bersama-sama. Komponen ini dikenal sebagai objek, dan
objek diciptakan dari template yang dikenal sebagai sebuah kelas, yang
menentukan jenis data objek yang mungkin berisi dan satu perilaku yang
diharapkan. Strategi ini menawarkan beberapa keuntungan:
Pengembang dapat mengubah penerapan aplikasi tanpa mempengaruhi
objek pengguna karena hanya interaksi pengguna dengan objek melalui
antarmuka.
Potensi terjadinya kesalahan pengguna berkurang karena kontrol yang
dilakukan atas interaksi pengguna dengan aplikasi.
Pewarisan
Banyak objek merupakan lingkungan kita dapat dimodelkan menggunakan
serangkaian yang didefinisikan cukup baik dari aturan. Ambil contoh, konsep dari
karyawan. Seluruh karyawan membagi seperangkat karakteristik: nama, ID
karyawan, dan upah, misalnya. Namun, ada banyak berbagai jenis karyawan:
pegawai, supervisor, kasir, dan pejabat CEO, antara lain, masing-masing
kemungkinan memiliki beberapa superset dari karakteristik tersebut yang
didefinisikan oleh definisi karyawan umum. Dalam hal berorientasi obyek,
berbagai tipe karyawan mewarisi definisi karyawan umum, termasuk semua
karakteristik dan perilaku yang berkontribusi untuk definisi ini. Pada gilirannya,
masing-masing tipe karyawan tertentu dapat diwarisi dengan jenis lain yang lebih
spesifik. Sebagai contoh, tipe Petugas mungkin diwariskan dengan petugas siang
dan malam seorang pegawai, yang masing-masing mewarisi semua sifat yang
ditentukan oleh kedua definisi karyawan dan definisi petugas. Membangun pada
ide ini, Anda bisa kemudian membuat kelas Manusia, dan kemudian membuat
kelas karyawan sebuah subclass dari Manusia. Efeknya adalah bahwa kelas
Karyawan dan semua kelas turunan nya (Petugas, Kasir, Eksekutif, dll) akan segera
mewarisi semua karakteristik dan perilaku yang didefinisikan oleh Manusia.
Metodologi Pengembangan berorientasi objek menempatkan persediaan
besar pada konsep dari warisan. Strategi ini mendorong penggunaan kembali
kode karena Ini mengasumsikan bahwa seseorang akan dapat menggunakan kelas
yang dirancang dengan baik (yaitu, kelas yang cukup abstrak untuk
memungkinkan untuk digunakan kembali) dalam berbagai aplikasi.
Polimorfisme
Polimorfisme, istilah yang berasal dari bahasa Yunani yang berarti "memiliki
berbagai bentuk," mendefinisikan kemampuan OOP untuk mendefinisi ulang,
atau berubah bentuk, karakteristik kelas atau perilaku tergantung pada konteks
yang digunakan. Kembali ke contoh, anggaplah bahwa perilaku yang berjudul
Kelas-kelas
Lingkungan sehari-hari kami terdiri dari entitas yang tak terhitung: tanaman,
orang, kendaraan, makanan ... aku bisa berlangsung berjam-jam hanya daftar
mereka. Setiap entitas didefinisikan oleh serangkaian tertentu dari karakteristik
dan perilaku yang pada akhirnya berfungsi untuk mendefinisikan entitas untuk
apa. Sebagai contoh, kendaraan bisa didefinisikan seperti memiliki karakteristik
seperti warna, jumlah ban, membuat, model, dan kapasitas, dan perilaku seperti
berhenti, pergi, mengaktifkan, dan membunyikan klakson. Dalam kosakata dari
OOP, seperti itu wujud dari entitas mendefinisikan atribut dan perilaku yang
dikenal sebagai sebuah kelas.
Kelas dimaksudkan untuk mewakili item dalam kehidupan nyata yang Anda
ingin untuk memanipulasi dalam aplikasi. Misalnya, jika Anda ingin membuat
aplikasi untuk mengelola perpustakaan umum, Anda mungkin ingin memasukkan
kelas mewakili buku, majalah, karyawan, acara khusus, pelanggan, dan hal lain
yang akan membutuhkan pengawasan. Setiap entitas mencakup serangkaian
karakteristik tertentu dan perilaku, yang lebih dikenal dalam OOP sebagai bidang
dan metode, masing-masing, yang mendefinisikan entitas sebagai apa itu. Kelas
umum PHP penciptaan sintaks sebagai berikut:
class Class_Name
{
// Field declarations defined here
// Method declarations defined here
}
Properti 6-1 menggambarkan sebuah kelas yang mewakili karyawan.
Judul Karyawan, kelas ini mendefinisikan tiga bidang, nama, judul, dan upah, di
samping dua metode, clockIn dan clockOut. Jangan khawatir jika Anda tidak
terbiasa dengan beberapa tata bahasa dan syntax, melainkan akan menjadi jelas
kemudian dalam bab ini.
Catatan Meskipun tidak ada kode PHP resmi konvensi yang ada, perhatikan hal
berikut ini Ekstensi PHP dan panduan Aplikasi Repositori saat membuat kelas
Anda. Anda dapat mempelajari lebih lanjut tentang konvensi di
http://pear.php.net/. Konvensi ini digunakan di seluruh buku ini.
Objek
Sebuah Kelas menyediakan dasar dari mana Anda dapat membuat contoh yang
spesifik dari entitas model kelas, lebih dikenal sebagai objek. Sebagai contoh,
sebuah aplikasi manajemen karyawan mungkin termasuk kelas karyawan. Anda
kemudian dapat memanggil kelas ini untuk membuat dan memelihara kasus yang
spesifik, Sally dan Jim, misalnya.
Catatan Praktek membuat objek berdasarkan kelas yang telah ditetapkan sering
disebut sebagai Instansiasi kelas.
Field
Fields adalah atribut yang dimaksudkan untuk menjelaskan beberapa aspek dari
sebuah kelas. Mereka sangat mirip dengan standar variabel PHP, kecuali beberapa
perbedaan kecil, yang akan Anda pelajari dalam bagian ini. Anda juga akan belajar
bagaimana cara mendeklarasikan dan memanggil field dan cara untuk membatasi
akses, menggunakan lingkup field.
Mendeklarasikan Field
peraturan tentang deklarasi field sangat mirip dengan pada tempat untuk
deklarasi variabel, pada dasarnya, tidak ada satu pun. Karena PHP adalah bahasa
longgar diketik, field bahkan tidak selalu perlu dideklarasikan, mereka hanya
dapat diciptakan dan ditugaskan secara bersamaan oleh objek kelas, meskipun
Anda akan jarang ingin melakukan itu. Sebaliknya, praktek yang umum adalah
untuk menyatakan field di awal kelas. Jika diinginkan, Anda dapat memberikan
mereka nilai awal saat ini. Sebuah contoh berikut:
class Employee
{
public $name = "John";
private $wage;
}
Dalam contoh ini, dua field, nama dan upah, yang diawali dengan deskripsi
lingkup (publik atau pribadi), sebuah praktek yang umum ketika menyatakan field.
Setelah dideklarasikan, setiap field dapat digunakan di bawah persyaratan yang
diberikan kepadanya dengan deskripsi ruang lingkup. Jika Anda tidak tahu apa
ruang lingkup memainkan peran pada field kelas, jangan khawatir, topik itu
dibahas kemudian pada bab ini.
Menjalankan Field
Field dirujuk menggunakan operator -> dan, tidak seperti variabel, tidak diawali
dengan tanda dolar. Selanjutnya, karena nilai sebuah Field biasanya khusus untuk
objek tertentu, maka berhubungan dengan objek seperti ini:
$object->field
Sebagai contoh, kelas Karyawan meliputi nama field, judul, dan upah. Jika Anda
membuat sebuah objek bernama $employee dari tipe karyawan, Anda akan
mengacu pada bidang-bidang seperti ini:
$employee->name
$employee->title
$employee->wage
Ketika Anda merujuk ke field dari dalam kelas dimana ia didefinisikan, masih
diawali dengan operator ->, walaupun bukan berhubungan ke nama kelas, Anda
menggunakan kata kunci $this. $this menunjukkan bahwa Anda mengacu pada
field yang berada pada kelas yang sama di mana field sedang diakses atau
dimanipulasi. Oleh Karena itu, jika Anda untuk menciptakan sebuah metode untuk
mengatur nama field di kelas Karyawan, mungkin terlihat seperti ini:
function setName($name)
{
$this->name = $name;
}
Lingkup Field
PHP mendukung lima field kelas lingkup: publik, private, protected, final, dan
static. Empat pertama diperkenalkan di bagian ini, dan ruang lingkup static
diperkenalkan dalam bagian berikutnya, "Static Class Members."
Public
Anda dapat mendeklarasikan field dalam lingkup publik dengan prakata field
dengan kata kunci public. Sebuah contoh berikut:
class Employee
{
public $name;
// Other field and method declarations follow...
}
Field Public kemudian dapat dimanipulasi dan diakses langsung dengan objek
yang sesuai, seperti:
Walaupun ini mungkin terlihat seperti cara logika untuk menjaga field kelas, Field
public sebenarnya umumnya dianggap tabu untuk OOP, dan untuk alasan yang
baik. Alasannya untuk menghindari penerapan seperti akses langsung merampas
kelas dengan cara yang mudah untuk menegakkan segala macam validasi data.
Sebagai contoh, tidak akan mencegah pengguna dari menetapkan nama seperti:
$employee->name = "12345";
Hal ini tentu saja bukan jenis input yang Anda harapkan. Untuk mencegah
kecelakaan tersebut dari yang terjadi, dua solusi yang tersedia. Salah satu solusi
melibatkan mengenkapsulasi data dalam objek, sehingga hanya tersedia melalui
serangkaian antarmuka, yang dikenal sebagai public metode. Data dikemas
dengan cara ini dikatakan sebagai private pada lingkup. Solusi kedua yang
disarankan melibatkan penggunaan properti dan sebenarnya cukup mirip dengan
solusi pertama, meskipun Agak lebih mudah pada banyak kasus. pelingkupan
Private diperkenalkan berikutnya, dan bagian pada properti segera berikut.
Catatan Pada PHP 6, Anda dapat menggunakan var pada tempat public.
Sebelum PHP 6, melakukannya mengangkat peringatan. Namun, Anda harus
memastikan menggunakan var untuk alasan kompatibilitas yang harus Anda
menciptakan perangkat lunak yang dapat digunakan pada instalasi server yang
berbeda.
Private
field private hanya dapat diakses dari dalam kelas dimana mereka didefinisikan.
Sebuah contoh berikut:
class Employee
{
private $name;
private $telephone;
}
Fields ditunjuk sebagai private tidak langsung dapat diakses oleh objek contoh,
mereka juga tidak tersedia untuk subclass. Jika Anda ingin membuat field Tersedia
untuk subclass, pertimbangkan untuk menggunakan lingkup protected sebaliknya,
diperkenalkan berikutnya. Sebaliknya, field private harus diakses melalui
antarmuka publik terbuka, yang memenuhi salah satu prinsip utama OOP yang
diperkenalkan pada awal bab ini: enkapsulasi. Perhatikan contoh berikut, di mana
field private dimanipulasi dengan metode public:
class Employee
{
private $name;
public function setName($name) {
$this->name = $name;
}
}
$staff = new Employee;
$staff->setName("Mary");
Protected
Sama seperti fungsi yang sering memerlukan variabel dimaksudkan untuk
digunakan hanya di dalam fungsi, kelas dapat mencakup field yang digunakan
untuk tujuan internal saja. field tersebut dianggap dilindungi dan diawali yang
sesuai. Sebuah contoh berikut:
class Employee
{
protected $wage;
}
Field Protected juga dibuat Tersedia mewarisi kelas untuk akses dan manipulasi,
suatu sifat yang tidak dimiliki oleh field private. Setiap usaha dengan suatu objek
untuk mengakses field Protected akan menghasilkan kesalahan fatal. Karena itu,
jika anda berencana untuk memperluas kelas, Anda harus menggunakan field
Protected sebagai pengganti field private.
Final
Menandai sebuah field sebagai final mencegah karena ditimpa dengan suatu
subclass, masalah dibahas lebih lanjut dalam bab berikutnya. Bidang
dirampungkan dinyatakan seperti:
class Employee
{
final $ssn;
}
Properties
Properties merupakan contoh yang meyakinkan dari fitur OOP yang kuat telah
ditawarkan, memastikan perlindungan field dengan memaksa akses dan
manipulasi untuk dilakukan melalui metode, namun memungkinkan data yang
akan diakses jika itu merupakan field public. Metode ini, dikenal sebagai accesor
dan mutator, atau lebih informal sebagai getter dan setter, secara otomatis
memicu setiap kali field diakses atau dimanipulasi, masing-masing.
Sayangnya, PHP tidak menawarkan fungsi properti yang mungkin Anda
gunakan jika Anda terbiasa dengan bahasa OOP lain seperti C++ dan Java. Oleh
karena itu, Anda harus membuat dengan menggunakan metode public untuk
meniru fungsi tersebut. Sebagai contoh, Anda mungkin akan membuat metode
getter dan setter untuk nama properti dengan mendeklarasikan dua fungsi,
getName () dan setName (), masing-masing, dan menanamkan sintaks yang tepat
dalam masing-masing. Contoh dari strategi ini disajikan pada akhir bagian ini.
Versi PHP 5 dan yang lebih baru memang menawarkan beberapa kemiripan
dukungan untuk properti, dilakukan dengan kelebihan beban metode __set dan
__get. Metode ini dipakai jika Anda mencoba untuk acuan variabel Member yang
tidak ada dalam definisi kelas. Properties dapat digunakan untuk berbagai
keperluan, seperti untuk memanggil sebuah pesan kesalahan, atau bahkan untuk
Pengaturan Properties
mutator, atau metode setter, bertanggung jawab baik untuk menyembunyikan
properti penerapan tugas dan validasi data kelas sebelum menugaskan ke field
kelas. Prototipe nya berikut:
boolean __set([string property name],[mixed value_to_assign])
Yang diperlukan sebagai input nama properti dan nilai yang sesuai,
mengembalikan TRUE jika metode ini berhasil dijalankan, dan FALSE sebaliknya.
Sebuah contoh berikut:
class Employee
{
var $name;
function __set($propName, $propValue)
{
echo "Nonexistent variable: \$$propName!";
}
}
$employee = new Employee ();
$employee->name = "Mario";
$employee->title = "Executive Chef";
Tentu saja, Anda dapat menggunakan metode ini untuk benar-benar memperluas
kelas dengan Properti baru, seperti ini:
class Employee
{
var $name;
function __set($propName, $propValue)
{
$this->$propName = $propValue;
}
}
$employee = new Employee();
$employee->name = "Mario";
$employee->title = "Executive Chef";
echo "Name: ".$employee->name;
echo "<br />";
echo "Title: ".$employee->title;
Mendapatkan Properties
accessor, atau metode mutator, bertanggung jawab untuk mengenkapsulasi kode
yang diperlukan untuk mengambil sebuah variabel kelas. Prototipe nya berikut:
boolean __get([string property name])
Yang diperlukan sebagai input salah satu parameter, nama properti yang nilainya
Anda ingin untuk mengambil. Ini harus mengembalikan nilai TRUE pada eksekusi
sukses, dan FALSE sebaliknya. Sebuah contoh berikut:
class Employee
{
var $name;
var $city;
protected $wage;
function __get($propName)
{
echo "__get called!<br />";
$vars = array("name","city");
if (in_array($propName, $vars))
{
return $this->$propName;
} else {
return "No such variable!";
}
}
}
$employee = new Employee();
$employee->name = "Mario";
echo $employee->name."<br />";
echo $employee->age;
<?php
class Employee
{
private $name;
// Getter
public function getName() {
return $this->name;
}
// Setter
public function setName($name) {
$this->name = $name;
}
}
?>
Meskipun strategi semacam ini tidak menawarkan kemudahan yang sama dengan
menggunakan properti, hal ini merangkum tugas manajemen dan pengambilan
menggunakan standar penamaan konvensi. Tentu saja, Anda harus
menambahkan fungsi validasi tambahan untuk setter, namun, contoh sederhana
ini seharusnya cukup untuk mendorong poin rumah.
Konstan
Anda dapat mendefinisikan konstanta, atau nilai-nilai yang tidak dimaksudkan
untuk diubah, di dalam kelas. Nilai ini akan tetap tidak berubah sepanjang masa
instantiated setiap obyek dari kelas itu. Kelas konstanta dibuat seperti ini :
const NAME = 'VALUE';
Misalnya, Anda membuat kelas matematika yang berhubungan berisi
sejumlah metode mendefinisikan fungsi matematika, di samping berbagai
konstanta:
class math_functions
{
const PI = '3.14159265';
const E = '2.7182818284';
const EULER = '0.5772156649';
// define other constants and methods here...
}
Kelas konstanta kemudian dapat dipanggil seperti ini:
echo math_functions::PI;
Method
Method sangat mirip dengan fungsi, hanya saja ini dimaksudkan untuk
menentukan perilaku kelas tertentu. Seperti fungsi, method dapat menerima
argumen sebagai input dan dapat mengembalikan nilai ke pemanggil. Method
juga dipanggil seperti fungsi, hanya saja method ini diawali dengan nama objek
yang memanggil method, seperti ini:
$object->method_name();
Pada bagian ini Anda akan mempelajari semua tentang method, termasuk
deklarasi method, pemanggilan method, dan lingkup.
Mendeklarasikan Method
Method dibuat dalam cara yang sama persis seperti fungsi, menggunakan sintaks
identik. Perbedaannya hanya antara method dan fungsi normal adalah bahwa
deklarasi method biasanya diawali dengan lingkup Penjelas. Sintaks umum
berikut:
scope function functionName()
{
// Function body goes here
}
Misalnya, method public berjudul calculateSalary() akan terlihat seperti ini:
public function calculateSalary()
{
return $this->wage * $this->hours;
}
Dalam contoh ini, method ini langsung memanggil dua bidang kelas, upah dan
jam, menggunakan kata kunci $this . Ini menghitung gaji dengan mengalikan dua
nilai field bersama-sama dan mengembalikan hasilnya seperti fungsi mungkin.
Namun, perlu diketahui itu metode tidak terbatas untuk bekerja hanya dengan
field kelas; itu sempurna yang valid untuk melewati dalam argumen dengan cara
yang sama Anda dapat dengan fungsi.
Tip Dalam hal method public Anda dapat secara tegas melupakan menyatakan
lingkup dan hanya menyatakan method seperti Anda akan fungsi (tanpa lingkup
apapun).
Memanggil Method
Method dipanggil hampir persis dengan cara yang sama seperti fungsi.
Melanjutkan contoh sebelumnya, calculateSalary () method akan dipanggil
seperti:
$employee = new Employee("Janie");
$salary = $employee->calculateSalary();
Lingkup Method
PHP mendukung enam lingkup method : publik, private, protected, abstrak, final,
dan static. Lima lingkup pertama diperkenalkan di bagian ini. Keenam, statis,
diperkenalkan dalam bagian berikutnya "Static Class Members."
Public
Method Public dapat diakses dari mana saja kapan saja. Anda menyatakan
method public dengan prakata kata kunci public atau dengan berpantang prakata
apapun. Contoh berikut menunjukkan kedua praktek deklarasi, selain
menunjukkan bagaimana method public bisa dipanggil dari luar kelas:
<?php
class Visitors
{
public function greetVisitor()
{
echo "Hello<br />";
}
function sayGoodbye()
{
echo "Goodbye<br />";
}
}
Visitors::greetVisitor();
$visitor = new Visitors();
$visitor->sayGoodbye();
?>
Private
Method ditandai sebagai private yang tersedia untuk digunakan hanya di dalam
kelas berasal dan tidak dapat dipanggil dengan objek instantiated, atau oleh salah
satu subkelas kelas berasal. Method hanya dimaksudkan untuk penolong bagi
metode lain yang terletak di dalam kelas yang harus ditandai sebagai private.
Sebagai contoh, mempertimbangkan sebuah method, validateCardNumber
dipanggil (), digunakan untuk menentukan validitas sintaks pelindung nomor kartu
perpustakaan. Meskipun method ini tentu akan terbukti berguna untuk
memuaskan sejumlah tugas, seperti membuat pelindung dan diri sendiri-keluar,
fungsi tidak digunakan saat dieksekusi sendirian. Oleh karena itu,
validateCardNumber () harus ditandai sebagai private, seperti ini:
private function validateCardNumber($number)
{
if (! ereg('^([0-9]{4})-([0-9]{3})-([0-9]{2})') ) return FALSE;
else return TRUE;
}
Mencoba untuk memanggil metode dari objek instantiated menghasilkan pada
kesalahan fatal.
Protected
Metode Kelas ditandai sebagai yang dilindungi tersedia hanya untuk kelas yang
berasal dan subclass-nya. Method tersebut dapat digunakan untuk membantu
kelas atau subclass melakukan penghitungan internal. Misalnya, sebelum
mengambil informasi tentang seorang anggota staf tertentu, Anda mungkin ingin
memastikan nomor identifikasi karyawan (EIN) yang disahkan pada sebagai
argumen ke inisiasi kelas. Anda kemudian akan memverifikasi EIN ini untuk
kebenaran sintaks menggunakan method verifyEIN (). Karena metode ini
dimaksudkan untuk digunakan hanya dengan metode lain di dalam kelas dan
berpotensi dapat berguna untuk kelas berasal dari karyawan, harus dideklarasikan
sebagai protected:
<?php
class Employee
{
private $ein;
function __construct($ein)
{
if ($this->verifyEIN($ein)) {
Upaya untuk memanggil verifyEIN () dari luar kelas akan menghasilkan kesalahan
fatal karena status ruang lingkup yang dilindungi tersebut.
Abstract
Method Abstrak khusus dimana mereka dinyatakan hanya dalam sebuah kelas
induk tetapi diimplementasikan di kelas anak. Hanya saja kelas dinyatakan sebagai
abstrak yang dapat mengandung method abstrak. Anda mungkin
mendeklarasikan method abstrak jika anda ingin mendefinisikan antarmuka
pemrograman aplikasi (API) yang nantinya dapat digunakan sebagai model untuk
implementasi. Seorang Pengembang akan tahu bahwa implementasi tertentu
tentang metode yang seharusnya bekerja asalkan memenuhi semua persyaratan
seperti yang didefinisikan oleh method abstrak. method Abstrak dinyatakan
seperti ini:
abstract function methodName();
Misalkan Anda ingin membuat sebuah abstrak kelas karyawan, yang kemudian
akan berfungsi sebagai kelas dasar untuk berbagai jenis karyawan (manajer,
petugas, kasir, dll):
abstract class Employee
{
abstract function hire();
abstract function fire();
abstract function promote();
abstract demote();
}
Final
Menandai metode sebagai final mencegah dari ditimpa oleh subclass. Sebuah
metode diselesaikan dinyatakan seperti ini:
class Employee
{
...
final function getName() {
...
}
}
Upaya untuk kemudian menimpa metode diselesaikan menghasilkan pada
kesalahan fatal. PHP mendukung enam lingkup metode : publik, private,
protected, abstrak, final, dan static.
Catatan topik kelas warisan dan mengesampingkan dari method dan field
dibahas pada bab berikutnya.
Tipe mengisyaratkan
Tipe mengisyaratkan adalah fitur yang diperkenalkan dengan rilis PHP 5. Tipe
mengisyaratkan memastikan bahwa obyek yang dilewatkan ke metode tersebut
memang anggota kelas yang diharapkan.
Perlu diketahui bahwa tipe mengisyaratkan hanya bekerja untuk obyek dan array.
Anda tidak dapat menawarkan petunjuk untuk jenis seperti integer, float, atau
string.
Constructors
Anda sering ingin menginisialisasi field tertentu dan bahkan memicu
melaksanakan metode yang ditemukan ketika suatu objek baru instantiated.
Tidak ada yang salah dengan melakukan hal itu segera setelah Instansiasi, tetapi
akan lebih mudah jika ini dilakukan untuk anda secara otomatis. Mekanisme
tersebut ada pada OOP, yang dikenal sebagai konstruktor. Cukup sederhana,
konstruktor didefinisikan sebagai sebuah blok kode yang secara otomatis
Sebagai contoh, misalkan Anda ingin segera mengisi field buku tertentu dengan
informasi spesifik untuk yang disediakan ISBN. Sebagai contoh, Anda mungkin
ingin mengetahui judul dan pengarang buku, selain berapa banyak salinan
perpustakaan memiliki dan berapa banyak saat ini tersedia untuk pinjaman. Kode
ini mungkin terlihat seperti ini:
<?php
class Book
{
private $title;
private $isbn;
private $copies;
public function _construct($isbn)
{
$this->setIsbn($isbn);
$this->getTitle();
$this->getNumberCopies();
}
public function setIsbn($isbn)
{
$this->isbn = $isbn;
}
public function getTitle() {
$this->title = "Beginning Python";
Tentu saja, implementasi kehidupan nyata mungkin akan melibatkan agak lebih
cerdas mendapatkan metode (misalnya, metode yang query database), tetapi
intinya adalah dibuat. instantiate buku objek menghasilkan dalam pemanggilan
konstruktor secara otomatis, yang pada gilirannya memanggil setIsbn (), getTitle
(), dan getNumberCopies () metode.
Selain itu, jika Anda ingin memastikan bahwa metode ini dipanggil hanya
melalui konstruktor, Anda harus menetapkan lingkup mereka dengan private,
memastikan bahwa mereka tidak dapat langsung dipanggil oleh objek atau
dengan subclass.
?>
Destructors
Walaupun objek secara otomatis dihancurkan setelah script selesai pada PHP 4,
itu tidak mungkin untuk menyesuaikan proses pembersihan. Dengan
diperkenalkannya destructors di PHP 5, kendala ini tidak lebih. Destructors dibuat
seperti method lainnya tetapi harus berjudul __destruct (). Sebuah contoh
berikut:
<?php
class Book
{
private $title;
private $isbn;
private $copies;
function __construct($isbn)
{
echo "<p>Book class instance created.</p>";
}
function __destruct()
{
echo "<p>Book class instance destroyed.</p>";
}
}
$book = new Book("1893115852");
?>
Saat script selesai, PHP akan menghancurkan segala benda yang berada di
memori. Oleh karena itu, jika kelas instantiated dan setiap informasi yang dibuat
akibat dari Instansiasi tersebut berada dalam memori, Anda tidak diharuskan
untuk secara tegas menyatakan sebuah destructor. Namun, jika data mudah
kurang dibuat (katakanlah, disimpan dalam database) sebagai akibat dari
Instansiasi dan harus dihancurkan pada saat kehancuran objek, Anda harus
membuat destructor kustom.
<?php
class Visitor
{
private static $visitors = 0;
function __construct()
{
self::$visitors++;
}
static function getVisitors()
{
return self::$visitors;
}
}
/* Instantiate the Visitor class. */
$visits = new Visitor();
echo Visitor::getVisitors()."<br />";
/* Instantiate another Visitor class. */
$visits2 = new Visitor();
echo Visitor::getVisitors()."<br />";
?>
Karena field $visitors dinyatakan sebagai statis, setiap perubahan yang dibuat ke
nilai (dalam hal ini melalui kelas konstruktor) disajikan di semua objek
instantiated. Juga dicatat bahwa field static dan method yang dirujuk dengan
menggunakan kata kunci self dan nama kelas, daripada melalui $this dan operator
tanda panah. Hal ini karena mengacu pada field static menggunakan cara yang
diperbolehkan untuk "reguler" saudara mereka tidak mungkin dan akan
menghasilkan kesalahan sintaks jika dicoba.
Catatan Anda tidak dapat menggunakan $this di dalam kelas untuk merujuk ke
field yang dideklarasikan sebagai static.
Ada dua hal yang patut dicatat di sini. Pertama, nama kelas ini tidak
dikelilingi oleh semacam pembatas (tanda kutip). Termasuk mereka akan
menghasilkan kesalahan sintaks. Kedua, jika perbandingan ini gagal, script akan
membatalkan eksekusi. Kata kunci instanceOf ini sangat berguna ketika Anda
bekerja dengan sejumlah objek secara bersamaan. Sebagai contoh, Anda mungkin
berulang kali memanggil fungsi tertentu tetapi ingin untuk menyiasati tingkah
laku fungsi itu sesuai dengan Tipe objek tertentu. Anda mungkin menggunakan
pernyataan kasus dan kata kunci instanceOf untuk mengelola perilaku pada cara
ini.
Fungsi Penolong
Sejumlah fungsi yang tersedia untuk membantu pengembang mengelola dan
menggunakan perpustakaan kelas. Fungsi-fungsi ini diperkenalkan pada bagian
ini.
Autoloading Objek
Untuk alasan organisasi, itu praktek umum untuk menempatkan setiap kelas pada
file terpisah. Mengembalikan ke skenario perpustakaan, misalkan memanggil
aplikasi manajemen untuk kelas mewakili buku, karyawan, acara, dan pelindung.
Ditugaskan dengan proyek ini, Anda dapat membuat direktori bernama kelas dan
menempatkan file berikut di dalamnya: Books.class.php, Employees.class.php,
Events.class.php, dan Patrons.class.php. Sementara ini memang memudahkan
manajemen kelas, itu juga mensyaratkan bahwa setiap file terpisah dibuat
tersedia untuk setiap script yang membutuhkan itu, umumnya melalui pernyataan
require_once (). Oleh karena itu, script meminta semua empat kelas yang akan
memerlukan bahwa pernyataan berikut dimasukkan di awal:
require_once("classes/Books.class.php");
require_once("classes/Employees.class.php");
require_once("classes/Events.class.php");
require_once("classes/Patrons.class.php");
Mengelola Penyertaan kelas dengan cara ini bisa menjadi agak membosankan dan
menambah langkah tambahan untuk yang rumit proses pengembangan. Untuk
menghilangkan tugas tambahan ini, konsep objek autoloading diperkenalkan pada
RANGKUMAN
Bab ini memperkenalkan dasar pemrograman berorientasi obyek, diikuti dengan
gambaran fitur dasar PHP berorientasi objek, mencurahkan perhatian khusus
untuk peningkatan dan penambahan yang dibuat tersedia dengan rilis PHP 5.
Bab selanjutnya memperluas pada informasi perkenalan ini, yang
mencakup topik-topik seperti warisan, antarmuka, kelas abstrak, dan banyak lagi.
CHAPTER 7
Fitur Lanjutan OOP
Bab 6 memperkenalkan dasar-dasar pemrograman berorientasi obyek (OOP). Bab
ini dibangun di atas fondasi itu dengan memperkenalkan beberapa fitur OOP lebih
maju yang harus Anda pertimbangkan setelah Anda telah menguasai dasar.
Secara khusus, bab ini memperkenalkan empat fitur berikut:
Obyek Kloning: Salah satu peningkatan besar model berorientasi objek PHP pada
versi 5 adalah perawatan semua objek sebagai referensi dan bukan nilai.
Warisan: Sebagaimana dibahas dalam Bab 6, kemampuan untuk membangun
hirarki kelas melalui warisan adalah konsep kunci dari OOP. Bab ini
memperkenalkan warisan fitur PHP dan sintaks, dan terdiri dari beberapa contoh
yang menunjukkan kunci fitur OOP.
Interface: antarmuka adalah sebuah koleksi tidak diimplementasikan definisi
metode dan konstanta yang berfungsi sebagai cetak biru kelas. Antarmuka
mendefinisikan tepatnya apa yang dapat dilakukan dengan kelas , tanpa terhenti
pada rincian implementasi yang spesifik. Bab ini memperkenalkan dukungan
antarmuka PHP dan menawarkan beberapa contoh menunjukkan fitur OOP yang
kuat.
Kelas Abstrak: Sebuah Kelas Abstrak adalah kelas yang tidak dapat instantiated.
Abstrak kelas dimaksudkan untuk diwariskan oleh kelas yang dapat instantiated,
lebih dikenal sebagai kelas nyata. Abstrak kelas bisa sepenuhnya
diimplementasikan, diimplementasikan secara parsial, atau tidak diterapkan sama
sekali. Bab ini menyajikan konsep-konsep umum sekitar kelas Abstrak,
digabungkan dengan pengenalan terhadap kemampuan Kelas abstraksi PHP.
Ruang nama: Ruang nama membantu Anda untuk lebih efektif mengelola basis
kode Anda dengan Pemilahan berbagai perpustakaan dan kelas-kelas sesuai
dengan konteks. Dalam bab ini saya akan memperkenalkan Anda dengan PHP 6
fitur ruang nama yang baru.
Catatan Semua fitur yang diuraikan dalam bab ini hanya tersedia untuk PHP 5
dan di atas.
Hanya waktu yang akan mengatakan apakah salah satu atau semua fitur
tersebut akan didukung dalam versi PHP mendatang.
Object Cloning
Salah satu kelemahan terbesar dari PHP 4 kemampuan berorientasi obyek adalah
perlakuan terhadap obyek hanya datatype lain, yang menghambat penggunaan
banyak metodologi OOP yang umum, seperti pola desain. Metodologi tersebut
tergantung pada kemampuan untuk melewatkan objek dengan metode Kelas lain
sebagai acuan, bukan sebagai nilai-nilai, yang tidak lagi praktek default PHP.
Syukurlah, hal ini telah diselesaikan dengan PHP 5, dan sekarang semua objek
diperlakukan secara default sebagai acuan. Namun, karena semua objek
diperlakukan sebagai acuan bukan sebagai nilai, sekarang lebih sulit untuk
menyalin objek. Jika Anda mencoba untuk menyalin objek referensi, itu hanya
akan menunjuk kembali untuk lokasi pengalamatan objek asli. Untuk
memperbaiki masalah dengan menyalin, PHP menawarkan cara tegas untuk
kloning sebuah objek.
Contoh Kloning
Anda dapat mengkloning sebuah objek dengan kata kunci clone, seperti:
destinationObject = clone targetObject;
Properti 7-1 menyajikan contoh objek-kloning. Contoh ini menggunakan Contoh
Kelas bernama Corporate_Drone, yang berisi dua anggota (employeeid dan
tiecolor) dan yang sesuai getter dan setter untuk para anggota. Contoh kode
instantiates Objek Corporate_Drone dan menggunakannya sebagai dasar untuk
menunjukkan efek dari operasi clone.
Seperti yang Anda lihat, $drone2 menjadi objek Tipe orporate_Drone dan
mewarisi nilai anggota dari $drone1. Untuk lebih menunjukkan bahwa $drone2
memang dari tipe Corporate_Drone, anggota employeeid yang juga dipindahkan.
Method __clone()
Anda dapat men-tweak tingkah laku kloning suatu objek dengan mendefinisikan
method __clone () dalam Kelas objek. Setiap kode dalam metode ini akan
mengeksekusi selama operasi kloning. Hal ini terjadi selain menyalin semua
anggota obyek yang ada untuk objek target. Sekarang kelas Corporate_Drone
direvisi, menambahkan metode berikut:
function __clone() {
$this->tiecolor = "blue";
}
Pewarisan
Orang cukup mahir berpikir dalam hal hierarki organisasi, oleh karena itu tidak
datang sebagai kejutan bahwa kita membuat pengunaan luas pandangan konsep
untuk mengelola berbagai aspek kehidupan kita sehari-hari. Struktur manajemen
perusahaan, sistem pajak AS, dan pandangan kita dari tumbuhan dan kerajaan
hewan ini hanya beberapa contoh sistem yang sangat bergantung pada konsep
hirarki. Karena OOP didasarkan pada dasar pemikiran yang memungkinkan
manusia untuk model yang erat dengan sifat dan perilaku lingkungan dunia nyata
kita mencoba untuk menerapkan dalam kode, masuk akal juga dapat mewakili
hubungan hirarkis.
Sebagai contoh, anggaplah bahwa aplikasi Anda memanggil untuk kelas
berjudul Karyawan, yang ditujukan untuk mewakili karakteristik dan perilaku yang
bisa diperkirakan dari karyawan. Beberapa anggota kelas yang mewakili
karakteristik akan mencakup hal berikut:
Karakteristik ini dan perilaku akan terkait untuk semua tipe karyawan, apapun
dari tujuan karyawan atau perawakan dalam organisasi. Tentu saja, meskipun,
ada juga perbedaan antara karyawan; sebagai contoh, pihak eksekutif mungkin
memegang opsi kepemilikan saham dan dapat menjarah perusahaan, sementara
karyawan lain tidak diberikan kemewahan tersebut. Seorang asisten harus dapat
mengambil sebuah memo, dan manajer kantor perlu untuk mengambil
persediaan pasokan. Meskipun perbedaan tersebut, maka akan sangat efisien jika
Anda harus membuat dan memelihara struktur kelas yang berlebihan untuk
atribut mereka bahwa semua bagian kelas. Paradigma pengembangan OOP
mempertimbangkan hal ini, memungkinkan Anda untuk mewarisi dan
membangun kelas yang ada.
Pewarisan Kelas
Sebagaimana diterapkan pada PHP, pewarisan kelas ini dilakukan dengan
menggunakan kata kunci extends. Properti 7-3 menunjukkan kemampuan ini,
terlebih dahulu menciptakan kelas karyawan dan kemudian menciptakan kelas
Executive yang mewarisi dari karyawan.
Catatan Sebuah kelas yang mewarisi dari kelas lain dikenal sebagai kelas anak,
atau subclass. Kelas yang merupakan diwarisi anak kelas dikenal sebagai induk,
atau kelas dasar.
function pillageCompany() {
echo "I'm selling company assets to finance my yacht!";
}
} // end Executive class
// Create a new Executive object
$exec = new Executive();
// Call the setName() method, defined in the Employee class
$exec->setName("Richard");
// Call the getName() method
echo $exec->getName();
// Call the pillageCompany() method
$exec->pillageCompany();
?>
Karena semua karyawan memiliki nama, kelas Executive diwarisi dari kelas
karyawan, menghemat anda dari kerumitan yang harus membuat nama anggota
dan getter dan setter yang sesuai. Anda kemudian bisa fokus hanya pada
karakteristik yang spesifik untuk seorang eksekutif, dalam hal ini method bernama
pillageCompany (). Method ini tersedia hanya untuk tipe objek Executive, dan
tidak untuk kelas Karyawan atau kelas lain, kecuali tentu saja Anda membuat
sebuah kelas yang diwarisi dari Executive. Contoh berikut menunjukkan konsep
itu, menghasilkan kelas berjudul CEO, yang diwarisi dari Executive:
<?php
class Employee {
...
}
class Executive extends Employee {
...
}
class CEO extends Executive {
function getFacelift() {
echo "nip nip tuck tuck";
}
}
$ceo = new CEO();
$ceo->setName("Bernie");
$ceo->pillageCompany();
$ceo->getFacelift();
?>
Karena Executive telah diwarisi dari karyawan, objek dari tipe CEO juga memiliki
semua anggota dan metode yang tersedia untuk Executive, sebagai tambahan
method getFacelift (), yang disediakan hanya untuk objek tipe CEO.
Namun, jika kelas anak juga memiliki konstruktor, konstruktor itu akan
mengeksekusi saat kelas anak instantiated, terlepas dari apakah kelas induk juga
memiliki konstruktor. Sebagai contoh, anggaplah bahwa tambahan kelas
Karyawan berisi konstruktor yang telah dijelaskan sebelumnya, kelas CEO berisi
konstruktor ini:
function __construct() {
echo "<p>CEO object created!</p>";
}
CHAPTER 8
Error and Exception Handling
Bahkan jika Anda memakai S pada dada Anda ketika datang ke pemrograman,
Anda dapat memastikan bahwa error akan merambat ke semuanya tapi yang
paling sepele dari aplikasi. Beberapa dari error -disebabkan- programmer
merupakan akibat dari kesalahan yang dibuat selama proses pengembangan.
Yang lainnya-disebabkan pengguna, disebabkan oleh ketidakinginan pengguna
akhir atau ketidakmampuan untuk menyesuaikan diri dengan kendala aplikasi.
Misalnya, pengguna mungkin memasukkan 12341234 ketika ditanya untuk alamat
e-mail, tentu saja mengabaikan apa yang sebaliknya akan diharapkan sebagai
masukan yang valid. Namun terlepas dari sumber kesalahan, aplikasi Anda harus
mampu menemukan dan bereaksi dengan error tak terduga dalam cara anggun,
berharap melakukannya tanpa kehilangan data atau menabrak aplikasi. Sebagai
tambahan, aplikasi Anda harus mampu memberikan pengguna dengan tanggapan
yang diperlukan untuk memahami alasan error tersebut dan berpotensi
menyesuaikan perilaku mereka yang sesuai.
Bab ini memperkenalkan beberapa fitur PHP yang ditawarkan untuk
menangani error. Secara khusus, topik berikut meliputi:
Konfigurasi direktif: PHP error yang terkait konfigurasi direktif menentukan
sebagian besar perilaku penanganan error bahasa itu. Banyak yang paling
penting direktif diperkenalkan dalam bab ini.
Error logging : Menjaga log berjalan adalah cara terbaik untuk merekam
kemajuan mengenai koreksi error berulang-ulang, serta cepat
mengidentifikasi masalah-masalah yang baru diperkenalkan. Dalam bab ini,
anda akan belajar bagaimana untuk log pesan baik syslog sistem operasi
Anda dan file log kustom.
Penanganan Pengecualian : Umum di kalangan bahasa populer (Java, C #,
dan Python, untuk beberapa nama), penanganan pengecualian telah
ditambahkan ke PHP dengan rilis versi 5. Penanganan Pengecualian
menawarkan proses standar untuk mendeteksi, menanggapi, dan
melaporkan error.
Petunjuk Konfigurasi
Sejumlah perintah konfigurasi menentukan perilaku PHP melaporkan error.
Banyak dari direktif ini diperkenalkan di bagian ini.
Deskripsi
Semua error dan peringatan
Fatal error saat kompilasi
Peringatan Saat kompilasi
Fatal error yang terjadi selama start awal PHP
Peringatan yang terjadi saat start awal PHP
Fatal error saat berjalan
pemberitahuan Menjalankan waktu
Saat kompilasi mengurai error
Dekat dengan fatal error (diperkenalkan dalam
PHP 5.2)
Usulan portabilitas versi PHP (diperkenalkan pada
PHP 5.0)
error yang dihasilkan Pengguna
pemberitahuan yang dihasilkan Pengguna
peringatan yang dihasilkan Pengguna
Peringatan saat berjalan
Selama tahap Pengembangan, Anda mungkin akan ingin semua error harus
dilaporkan. Oleh karena itu, pertimbangkan pengaturan direktif seperti ini:
error_reporting = E_ALL
Namun, misalkan Anda hanya memperhatikan tentang fatal saat berjalan,
mengurai, dan inti error. Anda bisa menggunakan operator logika untuk mengatur
direktif sebagai berikut:
error_reporting E_ERROR | E_PARSE | E_CORE_ERROR
Sebagai contoh terakhir, misalkan Anda ingin semua error dilaporkan selain untuk
yang dihasilkan pengguna:
error_reporting E_ALL
E_USER_NOTICE)
&
~(E_USER_ERROR
E_USER_WARNING
Seperti yang sering terjadi, nama permainan ini adalah untuk tetap baikinformasi tentang permasalahan yang sedang berlangsung aplikasi Anda tanpa
menjadi begitu dibanjiri dengan informasi yang Anda berhenti melihat pada log.
Luangkan saat bereksperimen dengan berbagai tingkat saat proses
Pengembangan, setidaknya sampai Anda menyadari berbagai tipe data laporan
bahwa tiap konfigurasi tersedia.
Karena kesalahan konfigurasi hak akses, aplikasi tidak dapat menulis ke file.
Namun bukan menangkap kesalahan dan menawarkan respon yang user-friendly,
Anda malah memilih untuk memungkinkan PHP untuk melaporkan hal tersebut
kepada pengguna akhir. Kesalahan yang ditampilkan akan terlihat seperti ini:
Logging Errors
Error seharusnya login setiap contoh karena rekaman tersebut menyediakan cara
yang paling penting untuk menentukan masalah khusus untuk aplikasi Anda dan
mesin PHP. Oleh karena itu, Anda harus menjaga log_errors diaktifkan setiap saat.
Tepatnya di mana pernyataan log direkam tergantung pada direktif error_log.
Error Logging
Jika Anda memutuskan untuk log error Anda ke file teks terpisah, pemilik server
Web memproses harus memiliki izin yang memadai untuk menulis ke file ini.
Selain itu, pastikan untuk menempatkan file ini di luar document root untuk
mengurangi kemungkinan penyerang bisa terjadi melewatinya dan berpotensi
menemukan beberapa informasi yang berguna untuk diam-diam masuk ke server
Anda.
Anda memiliki pilihan untuk pengaturan direktif error_log untuk fasilitas
logging sistem operasi (syslog pada Linux, Event Viewer pada Windows), yang
akan menghasilkan pesan error PHP yang ditulis dengan fasilitas logging sistem
operasi atau ke sebuah file teks. Ketika Anda menulis ke syslog, pesan error
terlihat seperti ini:
Ketika Anda menulis ke file teks terpisah, pesan error terlihat seperti ini:
Seperti mana yang akan digunakan, yaitu keputusan bahwa Anda harus membuat
pada basis per-lingkungan. Jika situs Web Anda berjalan pada server bersama,
menggunakan file teks terpisah atau tabel database mungkin satu-satunya solusi
Anda. Jika Anda kontrol server menggunakan syslog mungkin akan ideal karena
Anda dapat mengambil keuntungan dari kegunaan syslog-parsing untuk meninjau
dan menganalisis log. Berhati-hati untuk menguji kedua rute dan memilih strategi
yang paling sesuai dengan konfigurasi lingkungan server Anda.
PHP memungkinkan Anda untuk mengirim pesan khusus serta output error
umumnya ke syslog sistem. Empat fungsi memfasilitasi fitur ini. Fungsi-fungsi ini
diperkenalkan dalam bagian ini, diikuti dengan contoh kesimpulan.
Deskripsi
Jika error terjadi saat menulis ke syslog, mengirim output ke
sistem konsol.
Segera membuka koneksi ke syslog.
Jangan membuka koneksi sampai pesan pertama telah
diajukan untuk logging. Ini adalah default.
Output pesan log untuk kedua syslog dan standard error.
Menyertakan setiap pesan dengan proses ID (PID).
parameter kedua, pesan, menentukan teks dari pesan bahwa Anda ingin untuk
masuk. Jika Anda ingin log pesan error yang disediakan oleh mesin PHP, Anda
dapat menyertakan string % m dalam pesan. String ini akan digantikan oleh string
pesan error (strerror) yang ditawarkan oleh mesin pada waktu eksekusi.
Sekarang bahwa Anda telah mengenal dengan fungsi terkait, berikut
contohnya:
<?php
define_syslog_variables();
openlog("CHP8", LOG_PID, LOG_USER);
syslog(LOG_WARNING,"Chapter 8 example warning.");
closelog();
?>
Potongan ini akan menghasilkan sebuah entri log dalam pesan syslog file seperti
berikut:
Penanganan Eksepsi
Bahasa seperti Java, C #, dan Python telah lama digembar-gemborkan untuk
efisien kemampuan manajemen error, dicapai melalui penggunaan penanganan
eksepsi. Jika Anda memiliki pengalaman sebelumnya bekerja dengan penangan
eksepsi, Anda mungkin menggaruk kepala Anda ketika bekerja dengan bahasa
apapun, termasuk PHP, yang tidak menawarkan kemampuan serupa. Perasaan ini
tampaknya umum di komunitas PHP karena, pada versi 5, penangananpengecualian kemampuan telah dimasukkan ke dalam bahasa tersebut. Pada
bagian ini, Anda akan mempelajari semua tentang fitur ini, termasuk dasar
konsep, sintaks, dan praktik terbaik. Karena penanganan eksepsi adalah baru
untuk PHP, Anda mungkin tidak memiliki pengalaman sebelumnya memasukkan
fitur ini ke dalam aplikasi Anda. Oleh karena itu, gambaran umum disajikan
tentang hal tersebut. Jika Anda sudah terbiasa dengan konsep dasar, merasa
bebas untuk langsung beralih ke bahan PHP-yang spesifik nantinya di bagian ini.
Hampir semua bahasa dipinjam dari bahasa sintaks penangan C++, yang dikenal
sebagai try/catch. Berikut adalah contoh pseudocode sederhana:
try {
perform some task
if something goes wrong
throw exception("Something bad happened")
// Catch the thrown exception
} catch(exception) {
output the exception message
}
Anda juga dapat mengatur beberapa blok penangan, yang memungkinkan Anda
untuk menjelaskan berbagai error. Anda bisa melakukannya baik dengan
menggunakan berbagai penangan yang telah ditetapkan atau dengan
memperluas salah satu penangan yang telah ditetapkan, pada dasarnya
menciptakan penangan kustom Anda sendiri. PHP saat ini hanya menawarkan
penangan tunggal, eksepsi. Namun, penangan bisa diperpanjang jika diperlukan.
Kemungkinan penambahan penangan default akan tersedia pada rilis masa
mendatang. Untuk keperluan ilustrasi, mari kita membangun contoh pseudocode
sebelumnya, menggunakan kelas penanganan untuk mengelola I / O dan bagian
terkait error:
try {
perform some task
if something goes wrong
throw IOexception("Could not open file.")
if something else goes wrong
throw Numberexception("Division by zero not allowed.")
// Catch IOexception
} catch(IOexception) {
output the IOexception message
}
// Catch Numberexception
} catch(Numberexception) {
output the Numberexception message
}
Jika Anda baru untuk eksepsi, seperti sintaks penanganan error standar
sepertinya menghirup udara segar. Bagian berikutnya menerapkan konsep untuk
PHP dengan memperkenalkan dan menunjukkan berbagai prosedur penangananeksepsi yang tersedia pada versi 5.
Konstruktor Default
default constructor eksepsi dipanggil tanpa parameter. Sebagai contoh, Anda
dapat memanggil kelas eksepsi seperti:
throw new Exception();
Setelah eksepsi telah instantiated, Anda dapat menggunakan salah satu
dari enam metode diperkenalkan di akhir bagian ini. Namun, hanya empat akan
ada gunanya, sedangkan dua lainnya hanya berguna jika Anda instantiate kelas
dengan konstruktor overload, diperkenalkan berikutnya.
Overloaded Constructor
konstruktor overload menawarkan fungsionalitas tambahan yang tidak tersedia
untuk konstruktor default melalui penerimaan dari dua parameter opsional:
message: Dimaksudkan untuk penjelasan user-friendly yang mungkin akan
diteruskan ke pengguna melalui method getMessage (), yang diperkenalkan pada
bagian berikut.
Kode error: Dimaksudkan untuk menampung kesalahan identifikasi yang mungkin
akan dipetakan untuk beberapa identifier-tabel-pesan. Kode Error sering
digunakan untuk alasan internasionalisasi dan lokalisasi. Kode kesalahan ini dibuat
tersedia melalui method getCode (), yang diperkenalkan pada bagian berikutnya.
Nanti Anda akan mempelajari bagaimana dasar kelas eksepsi yang dapat diperluas
untuk menghitung identifikasi-untuk pencarian- tabel pesan.
Anda dapat memangil konstruktor dalam berbagai cara, masing-masing
yang ditunjukkan di sini:
throw new Exception("Something bad just happened", 4)
throw new Exception("Something bad just happened");
throw new Exception("", 4);
Tentu saja, tidak ada yang terjadi pada eksepsi sampai itu tertangkap,
seperti yang ditunjukkan kemudian dalam bagian ini.
Method
Enam method yang tersedia untuk kelas eksepsi:
getMessage():Mengembalikan pesan jika ini dilewatkan ke konstruktor.
getCode():Mengembalikan Kode error jika ini dilewatkan ke konstruktor.
getLine():Mengembalikan nomor baris dimana eksepsi dilemparkan.
getFile():Mengembalikan nama dari file melemparkan eksepsi.
getTrace():Mengembalikan array yang terdiri dari informasi yang berhubungan
dengan konteks di mana kesalahan terjadi. Secara khusus, array ini termasuk
nama file, baris, fungsi, dan parameter fungsi.
getTraceAsString():Mengembalikan semua informasi yang sama seperti yang
disediakan olehgetTrace (), selain itu informasi ini dikembalikan sebagai string
bukan sebagai array.
Jika eksepsi dimunculkan, sesuatu seperti berikut ini akan menjadi output:
$errors = file("errors/".$this->language.".txt");
foreach($errors as $error) {
list($key,$value) = explode(",",$error,2);
$errorArray[$key] = $value;
}
return $errorArray[$this->errorcode];
}
} # end My_Exception
try {
throw new My_Exception("english",4);
}
catch (My_Exception $e) {
echo $e->getMessageMap();
}
class Subscribe {
function validateEmail($email) {
try {
if ($email == "") {
throw new Exception("You must enter an e-mail address!");
} else {
list($user,$domain) = explode("@", $email);
if (! checkdnsrr($domain, "MX"))
throw new Invalid_Email_Exception(
"Invalid e-mail address!", $email);
else
return 1;
}
} catch (Exception $e) {
echo $e->getMessage();
} catch (Invalid_Email_Exception $e) {
echo $e->getMessage();
}
}
/* This method would presumably add the user's e-mail address to
a database. */
function subscribeUser() {
Anda dapat melihat bahwa hal itu mungkin untuk dua eksepsi yang berbeda
untuk kebakaran, salah satu berasal dari kelas dasar dan satu diperpanjang dari
kelas Invalid_Email_Exception.
Ringkasan
Topik yang dibahas dalam bab ini menyentuh banyak pada praktek penanganan
error inti yang digunakan dalam industri pemrograman saat ini. Sementara
penerapan fitur tersebut sayangnya masih keinginan lebih dari kebijakan,
pengenalan kemampuan seperti logging dan penanganan error telah memberikan
kontribusi besar terhadap kemampuan programmer untuk mendeteksi dan
menanggapi jika masalah tak terduga pada kode mereka.
Bab selanjutnya mengambil pandangan mendalam pada kemampuan PHP
menguraikan string, meliputi bahasa yang kuat fitur ekspresi reguler, dan
menawarkan wawasan ke dalam banyak fungsi yang kuat manipulasi string.
CHAPTER 9
Strings and
Regular Expressions
Regular Ekspresi
Ekspresi reguler memberikan dasar untuk menggambarkan atau pencocokan data
menurut aturan sintaks yang ditetapkan. Sebuah ekspresi reguler adalah tidak
lebih dari suatu pola karakter sendiri, dicocokkan dengan sebidang tertentu dari
teks. Urutan ini mungkin pola dengan yang Anda sudah terbiasa, seperti kata
anjing, atau mungkin pola dengan makna khusus pada konteks dunia pencocokan
pola, <(?)>.*<\ /.?>, untuk contoh.
PHP dibundel dengan fungsi library yang mendukung baik POSIX dan Perl
implementasi ekspresi reguler. Masing-masing memiliki gaya yang unik dari
sintaks dan dibahas sesuai dalam bagian berikutnya. Perlu diketahui bahwa
banyak sekali tutorial telah ditulis mengenai hal ini; Anda dapat menemukan
informasi di Web dan pada berbagai buku. Oleh karena itu, bab ini hanya
menyediakan pengenalan dasar masing-masing, meninggalkan kepada Anda
untuk mencari informasi lebih lanjut.
Jika Anda belum terbiasa dengan mekanisme ekspresi umum, silakan
mengambil beberapa waktu untuk membaca tutorial pendek yang menyusun sisa
dari bagian ini. Jika Anda sudah menjadi pro ekspresi reguler, merasa bebas untuk
melewatkan tutorial untuk bagian " Fungsi Ekspresi Regular PHP (POSIX
Extended)."
Catatan POSIX singkatan dari Portable Operating System Interface for Unix, dan
merupakan perwakilan dari serangkaian standar awalnya ditujukan untuk sistem
operasi berbasis Unix. POSIX syntax ekspresi reguler adalah suatu usaha untuk
menstandarisasi bagaimana ekspresi reguler diterapkan pada banyak bahasa
pemrograman.
Ekspresi reguler yang paling sederhana adalah salah satu yang cocok dengan satu
karakter, seperti g, yang akan cocok dengan string seperti Gog, haggle, dan bag.
Anda bisa menggabungkan beberapa huruf sama untuk membentuk ekspresi yang
lebih besar, seperti gan, dimana secara logika akan cocok dengan string yang
berisi gan: gang, Organize, atau Reagan, misalnya.
Anda juga dapat menguji beberapa ekspresi berbeda secara bersamaan
dengan menggunakan karakter pipa (|).Sebagai contoh, Anda bisa menguji untuk
php atau zend melalui ekspresi reguler php|zend.
Sebelum masuk ke dalam PHP fungsi berbasis ekspresi reguler POSIX, mari
kita tinjau tiga method POSIX mendukung untuk menempatkan urutan karakter
yang berbeda: kurung, bilangan, dan rentang karakter yang telah ditentukan.
Bracket
Braket ([]) digunakan untuk mewakili suatu daftar, atau range, karakter yang
harus dicocokkan. Sebagai contoh, bertentangan dengan php ekspresi reguler,
yang akan mencari string yang berisi secara tegas string php, ekspresi reguler
[php] akan menemukan string yang berisi karakter p atau h. Beberapa karakter
yang umum digunakan berkisar berikut:
[0-9] kecocokan apapun angka desimal dari 0 sampai 9.
[a-z] kecocokan apapun karakter dari huruf kecil a sampai huruf kecil z.
[A-Z] cocok dengan karakter dari huruf besar A sampai huruf besar Z.
[A-Za-z] kecocokan apapun karakter dari huruf besar A sampai huruf kecil z.
Tentu saja, rentang yang ditampilkan di sini bersifat umum, Anda juga dapat
menggunakan rentang [0-3] untuk menyesuaikan digit desimal mulai dari 0
sampai 3, atau cakupan [bv] untuk menyesuaikan karakter huruf kecil mulai dari b
sampai v. Singkatnya, Anda dapat menentukan setiap rentang ASCII yang Anda
inginkan.
Kata bilangan
Terkadang Anda mungkin ingin membuat ekspresi reguler yang mencari karakter
berdasarkan frekuensi atau posisi. Sebagai contoh, Anda mungkin ingin mencari
string yang berisi satu atau lebih instances dari huruf p, string yang berisi
setidaknya dua p, atau bahkan string dengan huruf p sebagai awal mereka atau
mengakhiri karakter. Anda dapat membuat permintaan ini dengan memasukkan
karakter khusus ke dalam ekspresi reguler. Berikut adalah beberapa contoh
karakter ini:
p+ cocok dengan string apapun yang berisi setidaknya satu p.
p* cocok dengan string yang berisi nol atau lebih p.
p? cocok dengan string yang berisi nol atau satu p.
p{2} cocok dengan string yang berisi serangkaian dua p.
p{2,3} cocok dengan string yang berisi serangkaian dua atau tiga p.
p{2,} cocok dengan string yang berisi serangkaian setidaknya dua p.
p$ cocok dengan string p pada akhir itu.
Masih tanda lainnya dapat dimasukkan sebelum dan dalam rangkaian karakter:
^p cocok dengan string p pada awal itu.
[^a-zA-Z] cocok dengan string bukan yang berisi salah satu karakter mulai dari a
sampai z dan A sampai Z.
p.p cocok dengan string yang berisi p, diikuti oleh karakter apapun, kemudian
diikuti dengan p lainnya.
Anda mungkin ingin mencari karakter khusus pada string bukan menggunakan
mereka pada konteks yang khusus saja digambarkan. Untuk melakukannya,
karakter harus diganti dengan backslash (\).Sebagai contoh, jika Anda ingin
mencari jumlah dolar, ekspresi reguler dapat diterima akan menjadi sebagai
berikut: ([\$])([0-9]+); yaitu tanda dolar diikuti dengan satu atau lebih integer.
Perhatikan backslash sebelum tanda dolar. Sesuai dengan potensi dari ekspresi
regular termasuk $42, $560, dan $3.
array ini, Anda dapat segmen sebuah URL menjadi beberapa bagian, seperti
ditunjukkan di sini:
<?php
$url = "http://www.apress.com";
// Break $url down into three distinct pieces:
// "http://www", "apress", and "com"
$parts = ereg("^(http://www)\.([[:alnum:]]+)\.([[:alnum:]]+)", $url, $regs);
echo $regs[0];
// outputs "http://www"
// outputs "apress"
// outputs "com"
?>
Dalam contoh ini, user harus memberikan password alphanumeric yang terdiri
dari delapan sampai sepuluh karakter, kalau tidak pesan error ditampilkan.
Jika tidak cocok yang ditemukan, string akan tetap tidak berubah. Seperti ereg (),
ereg_replace () adalah case sensitive. Pertimbangkan contoh:
<?php
$text = "This is a link to http://www.wjgilmore.com/.";
echo ereg_replace("http://([a-zA-Z0-9./-]+)$",
"<a href=\"\\0\">\\0</a>",
$text);
?>
Ini mengembalikan sebagai berikut:
Sebuah fitur yang agak menarik dari kemampuan PHP mengganti string adalah
mampu untuk dirujuk kembali substring tanda kurung. Ini bekerja mirip dengan
opsional parameter input regs pada fungsi ereg (), kecuali bahwa substring dirujuk
menggunakan backslash, seperti \ 0, \ 1, \ 2, dan seterusnya, di mana \ 0 merujuk
ke seluruh string, \ 1 pertama yang berhasil yang cocok, dan seterusnya. Sampai
sembilan referensi kembali dapat digunakan. Contoh ini menunjukkan bagaimana
untuk mengganti semua referensi ke URL bekerja dengan hyperlink:
$url = "Apress (http://www.apress.com)";
$url = ereg_replace("http://([a-zA-Z0-9./-]+)([a-zA-Z/]+)",
"<a href=\"\\0\">\\0</a>", $url);
echo $url;
// Displays Apress (<a
href="http://www.apress.com">http://www.apress.com</a>)
Catatan Meskipun ereg_replace () bekerja dengan baik, fungsi lain yang sudah
ditetapkan bernama str_replace () sebenarnya jauh lebih cepat ketika ekspresi
reguler yang kompleks tidak diperlukan. str_replace () dibahas pada bagian
berikutnya "Menggantikan Semua Contoh dari sebuah String dengan String lain."
Pengubah
Seringkali Anda ingin men-tweak penafsiran ekspresi reguler, misalnya,
Anda mungkin ingin memberitahu ekspresi reguler untuk mengeksekusi pencarian
case-insensitive atau untuk mengabaikan komentar tertanam di dalam sintaks.
Tweak ini dikenal sebagai pengubah, dan mereka pergi jauh ke arah membantu
Anda untuk menulis ekspresi pendek dan ringkas. Beberapa dari pengubah lebih
banyak menarik diuraikan pada Tabel 9-1.
Table 9-1. enam contoh modifikasi.
Pengubah
i
g
m
s
x
U
Deskripsi
Melakukan pencarian case-tidak sensitif.
Mencari semua kejadian (melakukan pencarian global).
Perlakukan string sebagai beberapa (m for ganda) baris. Secara
default, ^ dan $ karakter sesuai dengan pada awal dan akhir dari
string yang bersangkutan. Menggunakan pengubah m akan
memungkinkan untuk ^ dan $ untuk menyesuaikan pada awal dari
setiap baris dalam sebuah string.
Perlakukan string sebagai garis tunggal, mengabaikan karakter
baris baru yang ditemukan di dalam; ini menyelesaikan hanya
kebalikan dari pengubah m.
Mengabaikan spasi kosong dan komentar dalam ekspresi reguler.
Berhenti pada pencocokan pertama. Banyak bilangan yang
"serakah", mereka menyesuaikan pola sebanyak mungkin bukan
hanya berhenti pada pencocokan pertama. Anda dapat
menyebabkan mereka menjadi "tidak serakah" dengan pengubah
ini.
Metacharacter
Perl ekspresi reguler juga mempekerjakan metakarakter untuk lebih menyaring
pencarian mereka. Metakarakter hanya karakter abjad didahului dengan
backslash yang melambangkan arti khusus. Daftar metakarakter yang berguna
berikut:
\A: Cocok dengan hanya pada awal string.
\b: Cocok dengan batas kata.
\B: Cocok dengan apapun tetapi batas kata.
\d: Cocok dengan karakter digit. Ini sama dengan [0-9].
\D: Cocok dengan bukan karakter digit.
\s: Cocok dengan karakter spasi kosong.
\S: Cocok dengan bukan karakter spasi kosong.
[]:Melampirkan karakter kelas.
():Melampirkan pengelompokan karakter atau mendefinisikan referensi kembali.
$: Cocok dengan akhir baris.
^: Cocok dengan awal baris.
.: Cocok dengan karakter kecuali untuk baris baru.
\: Tanda kutip metakarakter selanjutnya
\w: Cocok dengan setiap string yang berisi hanya garis bawah dan karakter
alfanumerik. Ini adalah sama seperti [a-zA-Z0-9_].
\W: Cocok dengan string, menghilangkan garis bawah dan karakter alfanumerik.
Mari kita pertimbangkan beberapa contoh. Ekspresi reguler pertama akan cocok
dengan string seperti Pisa dan lisa tetapi bukan sand:
/sa\b/
Berikutnya mengembalikan terjadinya kasus-tidak sensitif pertama dari kata linux:
/\blinux\b/i
Kebalikan dari metakarakter batasan kata \B, pencocokan pada apa pun
selain batas kata. Oleh karena itu contoh ini akan cocok dengan string seperti
sand dan Sally tetapi bukan Melissa:
/sa\B/
Contoh terakhir mengembalikan semua contoh dari string yang cocok dengan
tanda dolar diikuti oleh satu atau lebih banyak digit:
/\$\d+\g
Perhatikan bahwa array sesuai dengan urutan diindeks dari array input. Jika nilai
pada posisi indeks cocok, itu termasuk dalam posisi yang sesuai dari output array.
Sebaliknya, posisi itu kosong. Jika Anda ingin menghapus terhadap hal dari array
yang kosong, menyaring output array melalui array_values fungsi (), yang
diperkenalkan pada Bab 5.
Opsional tanda input parameter ditambahkan pada versi PHP 4.3. Ia
menerima satu nilai, PREG_GREP_INVERT. Melewati tanda ini akan menghasilkan
pengambilan elemen array yang tidak cocok dengan pola.
Mencari Pola
fungsi preg_match () mencari string untuk pola tertentu, mengembalikan TRUE
jika ada, dan FALSE sebaliknya. Prototipe nya berikut:
int preg_match(string pattern, string string [, array matches]
[, int flags [, int offset]]])
opsional input parameter pattern_array dapat berisi berbagai bagian dari sub pola
yang terkandung dalam pola pencarian, jika berlaku. Berikut adalah contoh
menggunakan preg_match () untuk melakukan pencarian case-tidak sensitif:
<?php
$line = "vim is the greatest word processor ever created!";
if (preg_match("/\bVim\b/i", $line, $match)) print "Match found!";
?>
Untuk contoh script ini akan mengkonfirmasi kecocokan jika kata Vim atau vim
tersedia, tetapi bukan simplevim, vims, atau evim.
<?php
$text = "This is a link to http://www.wjgilmore.com/.";
echo preg_replace("/http:\/\/(.*)\//", "<a href=\"\${0}\">\${0}</a>", $text);
?>
Ini mengembalikan sebagai berikut:
Menariknya, pola dan penggantian parameter input juga bisa menjadi array.
Fungsi ini akan siklus melalui tiap elemen dari array masing-masing, membuat
penggantian saat ditemukan. Pertimbangkan contoh ini, yang dapat dipasarkan
sebagai perusahaan menyaring Laporan:
<?php
$draft = "In 2007 the company faced plummeting revenues and scandal.";
$keywords = array("/faced/", "/plummeting/", "/scandal/");
$replacements = array("celebrated", "skyrocketing", "expansion");
echo preg_replace($keywords, $replacements, $draft);
?>
Ini mengembalikan sebagai berikut:
Jika input parameter opsional batas yang ditentukan, hanya membatasi sejumlah
penggantian string yang dikembalikan. Pertimbangkan contoh:
<?php
$delimitedText = "Jason+++Gilmore+++++++++++Columbus+++OH";
$fields = preg_split("/\+{1,}/", $delimitedText);
foreach($fields as $field) echo $field."<br />";
?>
Ini mengembalikan sebagai berikut:
Catatan Selanjutnya dalam bab ini, pada bagian yang berjudul "Alternatif untuk
Fungsi Ekspresi Reguler" menawarkan beberapa fungsi standar yang dapat
digunakan sebagai pengganti dari kalimat biasa untuk Tugas tertentu. Dalam
banyak kasus, fungsi alternatif ini sebenarnya tampil lebih cepat daripada rekan
ekspresi reguler mereka.
tampaknya paling sering muncul dalam forum komunitas. Bagian ini dibagi
menjadi topik sebagai berikut:
Menentukan panjang string
Membandingkan dua string
Manipulasi kasus string
Konversi string ke dan dari HTML
Alternatif untuk fungsi ekspresi reguler
Lapisan dan mengupas string
Menghitung karakter dan Kata
else
echo "Password is valid!";
?>
Dalam hal ini, pesan error tidak akan muncul karena password yang dipilih terdiri
dari sepuluh karakter, sedangkan ekspresi kondisional memvalidasi apakah target
string terdiri kurang dari sepuluh karakter.
Situs Web sering memerlukan pengguna mendaftar untuk masuk dan kemudian
konfirmasikan password, mengurangi kemungkinan salah memasukkan password
sebagai akibat dari kesalahan mengetik. strcmp () adalah fungsi yang hebat untuk
membandingkan dua entri password karena password sering case sensitif:
<?php
$pswd = "supersecret";
$pswd2 = "supersecret2";
if (strcmp($pswd,$pswd2) != 0)
echo "Passwords do not match!";
else
echo "Passwords match!";
?>
catatan bahwa string harus sama persis agar strcmp () untuk mempertimbangkan
mereka sama. Sebagai contoh, Supersecret berbeda dari supersecret. Jika Anda
ingin membandingkan string dua kasus tidak peka, pertimbangkan strcasecmp (),
diperkenalkan selanjutnya. Hal lain yang umum membingungkan tentang fungsi
ini melingkupi perilakunya mengembalikan 0 jika kedua string sama. Hal ini
berbeda dengan mengeksekusi sebuah perbandingan string dengan menggunakan
operator ==, seperti:
if ($str1 == $str2)
Saat kedua mencapai tujuan yang sama, yaitu untuk membandingkan dua string,
perlu diingat bahwa nilai mereka mengembalikan dalam melakukan hal yang
berbeda.
<?php
$sentence = "the newest version of PHP was released today!";
echo ucfirst($sentence);
?>
Ini mengembalikan sebagai berikut:
Catatan bahwa huruf pertama memang dikapitalisasi, huruf kata PHP ini
dibiarkan.
Catatan bahwa jika O'Malley ini sengaja ditulis sebagai O'Malley, ucwords () tidak
akan menangkap kesalahan, karena menganggap kata yang akan didefinisikan
sebagai string karakter yang dipisahkan dari entitas lain pada string dengan spasi
kosong di setiap sisi .
?>
anda
dapat
mengunakan
fungsi
Deskripsi
Traditional Chinese
BIG5 with additional Hong Kong extensions, traditional Chinese
DOS-specific Cyrillic character set
Windows-specific Cyrillic character set
Windows-specific character set for Western Europe
Japanese
Simplified Chinese
Western European, Latin-1
Western European, Latin-9
Russian
Japanese
ASCII-compatible multibyte 8 encode
Dua karakter dikonversi, grave accent () dan cedilla (). Tanda petik tunggal
diabaikan karena quote_style pengaturan default ENT_COMPAT.
<?php
$input = "I just can't get <<enough>> of PHP!";
echo htmlspecialchars($input);
?>
Melihat sumber, Anda akan melihat sebagai berikut:
Jika terjemahan tidak perlu, mungkin cara yang lebih efisien untuk melakukan hal
ini bisa menggunakan strip_tags (), yang menghapus tag dari string sekaligus.
Catatan Fungsi lain yang berperilaku seperti strip_tags () adalah fgetss (). Fungsi
ini dijelaskan pada Bab 10.
<?php
$summary = <<< summary
In the latest installment of the ongoing Developer.com PHP series,
I discuss the many improvements and additions to
<a href="http://www.php.net">PHP 5's</a> object-oriented architecture.
summary;
$words = sizeof(explode(' ',strip_tags($summary)));
echo "Total words in summary: $words";
?>
explode () berfungsi akan selalu sangat lebih cepat daripada preg_split (), split (),
dan spliti (). Oleh karena itu, selalu menggunakannya bukan yang lain saat
ekspresi reguler tidak diperlukan.
<?php
$substr = "index.html";
$log = <<< logfile
192.168.1.11:/www/htdocs/index.html:[2006/02/10:20:36:50]
192.168.1.13:/www/htdocs/about.html:[2006/02/11:04:15:23]
192.168.1.15:/www/htdocs/index.html:[2006/02/15:17:25]
logfile;
// What is first occurrence of the time $substr in log?
$pos = strpos($log, $substr);
// Find the numerical position of the end of the line
$pos2 = strpos($log,"\n",$pos);
// Calculate the beginning of the timestamp
$pos = $pos + strlen($substr) + 1;
// Retrieve the timestamp
$timestamp = substr($log,$pos,$pos2-$pos);
echo "The file $substr was first accessed on: $timestamp";
?>
Fungsi stripos () beroperasi identik dengan strpos (), kecuali bahwa itu
mengeksekusi pencarian case-tidak sensitif.
Mengembalikan
sebelumnya
Bagian
dari
String
Berdasarkan
diimbagi
ditetapkan
Fungsi substr () mengembalikan bagian dari string yang terletak antara yang
sudah ditetapkan diawal diimbangi dan panjang posisi. Prototipe nya berikut:
string substr(string str, int start [, int length])
Jika parameter opsional panjang tidak ditentukan, substring dianggap string mulai
dari awal dan berakhir pada akhir str. Ada empat poin yang harus diingat saat
menggunakan fungsi ini:
Jika dimulai positif, string dikembalikan akan dimulai pada posisi awal string.
Jika dimulai adalah negatif, string dikembalikan akan dimulai pada posisi
panjang-awal string.
Jika panjang disediakan dan positif, string dikembalikan akan terdiri dari
karakter antara start dan start + panjang. Jika jarak ini melebihi panjang string
total, hanya string antara awal dan akhir string akan dikembalikan.
Jika panjang disediakan dan negatif, string dikembalikan yang akan berakhir
panjang karakter dari akhir str.
Perlu diingat bahwa memulai adalah diimbangi dari karakter pertama dari str,
sehingga thereturned string akan benar-benar dimulai pada karakter mulai posisi
+ 1. Pertimbangkan contoh dasar:
<?php
$car = "1944 Ford";
echo substr($car, 5);
?>
Ini mengembalikkan sebagi berikut :
Misalnya anda membangun situs e-commerce dan dalam profil user antarmuka
Anda ingin menampilkan hanya empat digit terakhir yang disediakan nomor kartu
kredit. Fungsi ini sangat ideal untuk tugas seperti itu:
<?php
$ccnumber = "1234567899991111";
echo substr_replace($ccnumber,"************",0,12);
?>
Ini mengembalikan sebagai berikut:
Catatan bahwa str_pad () memotong pola yang didefinisikan oleh pad_string jika
panjang tercapai sebelum menyelesaikan seluruh pengulangan pola.
Catatan Jika Anda tidak terbiasa dengan PEAR, luangkan waktu untuk meninjau
Bab 11 sebelum melanjutkan.
Benar saja, dengan cepat PEAR mencari muncul Validate_US, sebuah paket yang
mampu memvalidasi berbagai item informasi spesifik untuk Amerika Serikat.
Meski masih dalam versi beta pada saat menekan, Validate_US sudah mampu
secara sintaksis memvalidasi nomor telepon, SSN, singkatan negara, dan kode ZIP.
Bagian ini menunjukkan kepada Anda bagaimana menginstal dan menerapkan
paket ini yang sangat berguna.
Menginstal Validate_US
Untuk mengambil keuntungan dari Validate_US, anda perlu menginstalnya.
Proses untuk melakukannya berikut:
Catatan karena Validate_US adalah rilis beta (pada saat penulisan ini), anda harus
memberikan opsi-f untuk perintah menginstal agar memaksa instalasi.
Menggunakan Validate_US
Paket Validate_US sangat mudah digunakan, hanya menginisiasi kelas
Validate_US ()dan memanggil metode validasi yang sesuai. Total ada tujuh
metode, empat di antaranya relevan dengan diskusi ini:
phoneNumber (): Validasi nomor telepon, kembali TRUE pada keberhasilan, dan
FALSE sebaliknya. Hal ini menerima nomor telepon dalam berbagai format,
termasuk xxx-xxxx xxx, xxxx (xxx)-xxx, dan kombinasi serupa tanpa tanda garis,
tanda kurung, atau spasi. Sebagai contoh, (614) 999-9999, 6149999999, dan (614)
9999999 adalah semua valid, sedangkan (6149999999, 614-999-9999, dan
614.999 tidak.
postalCode(): Memvalidasi kode ZIP, kembali TRUE pada keberhasilan, dan FALSE
sebaliknya. Hal ini menyetujui kode ZIP dalam berbagai format, meliputi xxxxx,
xxxxxxxxx, xxxxx-xxxx, dan kombinasi serupa tanpa garis (-). Misalnya, 43210 dan
43210-0362 keduanya valid, sedangkan 4321 dan 4321009999 tidak.
region (): Validasi singkatan negara, kembali TRUE pada keberhasilan, dan FALSE
sebaliknya. Hal ini menyetujui dua huruf singkatan negara seperti yang didukung
oleh
Pelayanan
POS
US
(http://www.usps.com/ncsc/lookups/usps_abbreviations.html). Untuk contoh,
OH, CA, dan NY semua valid, sedangkan CC, DUI, dan BASF tidak.
SSN (): Validasi SSN yang tidak hanya memeriksa sintaks SSN tetapi juga
memeriksa informasi validasi yang tersedia melalui situs Web Administrasi
Jaminan Sosial (http://www.ssa.gov/), mengembalikan TRUE pada keberhasilan,
dan FALSE sebaliknya. Hal ini menyetujui SSN dalam berbagai format, meliputi
xxx-xxxx-xx, xxx xxx xx, xxx / xx / xxxx, xxx \ Txx \ txxxx (\ t = tab), xxx \ nxx \ nxxxx
(\ n = newline), atau kombinasi sembilan angka bagiannya yang melibatkan tanda
hubung, spasi, backshlas, tab, atau karakter baris baru. Sebagai contoh, 479-356432 dan 591467543 adalah valid, sedangkan 999999999, 777665555, dan 45678
tidak.
Ringkasan
Banyak fungsi diperkenalkan dalam bab ini berada di antara yang paling umum
digunakan dalam aplikasi PHP anda, karena mereka membentuk inti dari bahasa
kemampuan itu manipulasi string.
Bab selanjutnya mengkaji kumpulan fungsi yang sudah usang: mereka
dikhususkan untuk bekerja dengan file dan sistem operasi.
BAB 10
Bekerja dengan File dan
Sistem Operasi
Ini cukup jarang untuk menulis aplikasi yang sepenuhnya dapat berdiri sendiri,
sebuah program yang tidak bergantung pada setidaknya beberapa tingkat
interaksi dengan sumber daya eksternal, seperti yang mendasari file dan sistem
operasi, dan bahkan bahasa pemrograman lainnya. Alasan untuk ini adalah
sederhana: sebagai bahasa, sistem file, dan sistem operasi dewasa, kesempatan
untuk membuat jauh lebih efisien, terukur, dan aplikasi tepat waktu meningkat
besar sebagai hasil dari kemampuan pengembang untuk mengintegrasikan fitur
mencoba-dan-benar tiap komponen menjadi produk tunggal. Tentu saja, triknya
adalah untuk memilih bahasa yang menawarkan cara mudah dan efisien untuk
melakukannya. Untungnya, PHP memenuhi kedua kondisi cukup baik,
menawarkan programmer array yang indah alat tidak hanya untuk menangani file
sistem input dan output, tetapi juga untuk melaksanakan program pada tingkat
kulit. Bab ini menyajikan sebagai pengenalan fitur ini, menjelaskan bagaimana
bekerja dengan:
File dan direktori: Anda akan belajar bagaimana melakukan forensik sistem file,
mengungkapkan rincian seperti file dan ukuran direktori dan lokasi, modifikasi
dan akses waktu, dan banyak lagi.
File I / O: Anda akan belajar bagaimana berinteraksi dengan file data, yang akan
membiarkan Anda melakukan berbagai tugas praktis, meliputi membuat,
menghapus, membaca, dan menulis file.
Isi Direktori: Anda akan belajar cara mudah mengambil isi direktori.
perintah Shell: Anda dapat mengambil keuntungan dari sistem operasi dan
Fungsi tingkat bahasa lainnya dari dalam aplikasi PHP melalui sejumlah yang
dibangun pada fungsi dan mekanisme.
Mensterilkan Input: Walaupun Bab 21 masuk ke dalam topik ini secara rinci,
bab ini menunjukkan beberapa kemampuan mensterilkan input PHP,
menunjukkan Anda bagaimana untuk mencegah pengguna dari melewati data
yang dapat berpotensi menyebabkan kerusakan pada data Anda dan sistem
operasi.
Catatan PHP terutama mahir dalam bekerja dengan sistem file yang mendasari,
begitu banyak sehingga mendapatkan popularitas sebagai interpreter commandline, kemampuan diperkenalkan pada versi 4.2.0. Topik ini di luar ruang lingkup
buku ini, tapi Anda dapat menemukan informasi tambahan pada manual PHP.
<?php
$drive = "/usr";
printf("Remaining MB on %s: %.2f", $drive,
round((disk_free_space($drive) / 1048576), 2));
?>
Ini mengembalikan sebagai berikut:
Perhatikan bahwa jumlah yang dikembalikan dalam Megabyte (MB) karena nilai
dikembalikan dari disk_free_space () dibagi oleh 1.048.576, yang setara dengan
1MB.
Catatan Perintah du akan meringkas penggunaan disk dari file atau direktori.
Lihat halaman manual yang tepat untuk informasi penggunaan.
$directorySize=0;
// Open the directory and read its contents.
if ($dh = @opendir($directory)) {
// Iterate through each directory entry.
while (($filename = readdir ($dh))) {
// Filter out some of the unwanted directory entries.
if ($filename != "." && $filename != "..")
{
// File, so determine size and add to total.
if (is_file($directory."/".$filename))
$directorySize += filesize($directory."/".$filename);
// New directory, so initiate recursion. */
if (is_dir($directory."/".$filename))
$directorySize += directory_size($directory."/".$filename);
}
}
}
@closedir($dh);
return $directorySize;
} #end directory_size()
$directory = "/usr/book/chapter10/";
Catatan Waktu terakhir diubah berbeda dari waktu modifikasi terakhir bahwa
waktu diubah terakhir mengacu pada setiap perubahan data inode file, meliputi
perubahan untuk hak akses, grup, pemilik, atau informasi spesifik lainnya inode,
sedangkan waktu terakhir diubah mengacu perubahan terhadap konten file
(khususnya, ukuran byte).
Membuka File
fungsi fopen () mengikat sebuah file untuk pegangan. Setelah terikat, script dapat
berinteraksi dengan file ini melalui pegangan. Prototipe nya berikut:
resource fopen(string resource, string mode [, int use_include_path
[, resource zcontext]])
Sementara fopen () ini paling sering digunakan untuk membuka file untuk
membaca dan manipulasi, itu juga mampu membuka sumber daya melalui
beberapa protokol, termasuk HTTP, HTTPS, dan FTP, konsep dibahas pada Bab 16.
Mode, ditugaskan pada saat sumber daya dibuka, menentukan tingkat
akses yang tersedia untuk sumber daya itu. Berbagai mode didefinisikan pada
Tabel 10-1.
Deskripsi
Hanya membaca. Pointer file ditempatkan pada awal file.
Membaca dan menulis. Pointer file ditempatkan pada awal file.
hanya Menulis. Sebelum menulis, menghapus isi file dan
mengembalikan pointer file ke awal file. Jika file tidak ada,
berusaha untuk menciptakannya.
Membaca dan menulis. Sebelum membaca atau menulis,
menghapus isi file dan mengembalikan pointer file ke awal file. Jika
file tidak ada, berusaha untuk menciptakannya.
Hanya Menulis. Pointer file ditempatkan pada akhir file. Jika file
tidak ada, berusaha untuk menciptakannya. Mode ini lebih dikenal
sebagai Tambahkan.
Membaca dan menulis. Pointer file ditempatkan pada akhir file.
Jika file tidak ada, berusaha untuk menciptakannya. Proses ini
dikenal sebagai menambahkan ke file.
Membuka file dalam mode biner.
Membuka file dalam mode teks.
Jika sumberdaya ditemukan pada sistem file lokal, PHP mengharapkannya akan
tersedia pada path prakata itu. Sebagai alternatif, Anda dapat menugaskan fopen
() parameter use_include_path nilai dari 1, yang akan menyebabkan PHP untuk
mencari sumber daya dalam path yang ditentukan oleh direktif konfigurasi
include_path.
Menutup File
Praktek pemrograman yang baik mengharuskan bahwa Anda harus
menghancurkan pointer ke setiap sumber daya setelah anda selesai dengan
mereka. Fungsi fclose () menangani ini untuk Anda, menutup yang sebelumnya
pointer file dibuka ditentukan dengan menangani file, mengembalikan TRUE pada
kesuksesan dan FALSE sebaliknya. Prototipe nya berikut:
boolean fclose(resource filehandle)
Filehandle harus sebuah pointer file yang sudah ada dibuka menggunakan
fopen () atau fsockopen ().
Ale [email protected]
Nicole [email protected]
Laura [email protected]
script berikut membaca pada users.txt dan mengurai dan mengubah data
ke dalam format berbasis Web mudah dicapai. Perhatikan file () menyediakan
perilaku khusus karena tidak seperti fungsi lain read /write, Anda tidak harus
menetapkan file menangani untuk membacanya:
<?php
// Read the file into an array
$users = file("users.txt");
// Cycle through the array
foreach ($users as $user) {
// Parse the line, retrieving the name and e-mail address
list($name, $email) = explode(" ", $user);
// Remove newline from $email
$email = trim($email);
// Output the formatted name and e-mail address
echo "<a href=\"mailto:$email\">$name</a> <br /> ";
}
?>
Script ini menghasilkan output HTML sebagai berikut:
Seperti fopen (), Anda dapat memberitahu file () untuk mencari melalui
path yang ditentukan dalam parameter konfigurasi include_path dengan
menetapkan use_include_path ke 1. Parameter konteks mengacu pada konteks
aliran. Anda akan belajar lebih banyak tentang topik ini pada Bab 16.
Pertimbangkan skenario di mana data pelanggan berita mingguan ini diambil dari
file sementara untuk Pembaca oleh staf pemasaran. File ini mungkin terlihat
seperti ini:
Jason Gilmore,[email protected],614-555-1234
Bob Newhart,[email protected],510-555-9999
Carlene Ribhurt,[email protected],216-555-0987
Selalu ingin rentetan departemen IT dengan permintaan meragukan, staf
pemasaran meminta bahwa informasi juga harus dibuat tersedia untuk dilihat
pada Web. Syukurlah, ini mudah dilakukan dengan fgetcsv (). Contoh berikut
mengurai file:
<?php
// Open the subscribers data file
$fh = fopen("/home/www/data/subscribers.csv", "r");
// Break each line of the file into three parts
while (list($name, $email, $phone) = fgetcsv($fh, 1024, ",")) {
// Output the data in HTML format
printf("<p>%s (%s) Tel. %s</p>", $name, $email, $phone);
}
?>
<?php
// Open a handle to users.txt
$fh = fopen("/home/www/data/users.txt", "rt");
// While the EOF isn't reached, read in another line and output it
while (!feof($fh)) echo fgets($fh);
// Close the handle
fclose($fh);
?>
while (!feof($fh)) {
$article .= fgetss($fh, 1024, $tags);
}
// Close the handle
fclose($fh);
// Open the file up in write mode and output its contents.
$fh = fopen("article.html", "wt");
fwrite($fh, $article);
Tip Jika opsional panjang parameter tidak disediakan untuk fwrite (), parameter
konfigurasi magic_quotes_runtime akan diabaikan. Lihat Bab 2 dan 9 untuk
informasi lebih lanjut tentang parameter ini. Ini hanya berlaku untuk PHP 5 dan
sebelumnya.
SEEK_END: Mengatur posisi pointer ke EOF ditambah byte diimbangi. Dalam hal
ini, diimbangi harus di-set ke nilai negatif.
SEEK_SET: Mengatur posisi pointer ke byte diimbangi. Hal ini memiliki efek yang
sama dengan menghilangkan darimana.
Catatan bahwa readdir () juga mengembalikan. dan .. entri umum untuk sebuah
daftar direktori Unix yang khas. Anda dapat dengan mudah menyaring tersebut
keluar dengan sebuah pernyataan if:
if($file != "." AND $file != "..")...
Parameter konteks mengacu pada konteks aliran. Anda akan belajar lebih banyak
tentang topik ini pada Bab 16.
delete_directory($dir);
?>
Menyentuh File
fungsi touch () mengatur file nama file terakhir dimodifikasi dan terakhir diakses ,
mengembalikan TRUE pada keberhasilan atau FALSE pada kesalahan. Prototipe
nya berikut:
int touch(string filename [, int time [, int atime]])
Jika waktu tidak disediakan, saat ini (seperti ditentukan oleh server)
digunakan. Jika parameter opsional atime disediakan, waktu akses akan
ditetapkan untuk nilai ini; sebaliknya, seperti waktu modifikasi, maka akan
ditetapkan baik waktu atau waktu server sekarang.
Catatan bahwa jika nama file tidak ada, maka akan dibuat, dengan asumsi
bahwa pemilik script itu memiliki izin yang memadai.
Mensterilkan Input
Mengabaikan untuk membersihkan input pengguna yang kemudian dapat
dikirimkan ke fungsi sistem level dapat memungkinkan penyerang untuk
melakukan kerusakan internal yang besar pada penyimpanan informasi Anda dan
sistem operasi, merusak atau menghapus file Web, dan sebaliknya akan
mendapatkan akses tak terbatas ke server Anda. Dan itu hanya awal.
Membatasi Input
fungsi escapeshellarg () membatasi argumen yang disediakan dengan tanda kutip
tunggal dan awalan (lolos) mengutip ditemukan di dalam input. Prototipe nya
berikut:
string escapeshellarg(string arguments)
efeknya adalah ketika argumen dilewatkan ke perintah shell, maka akan dianggap
sebagai argumen tunggal. Hal ini penting karena mengurangi kemungkinan bahwa
Penyerang bisa menyamar perintah tambahan sebagai argumen perintah shell.
Oleh karena itu, dalam skenario sebelumnya mimpi buruk, seluruh input
pengguna akan diapit tanda kutip tunggal, seperti:
'http://www.wjgilmore.com/ ; cd /usr/local/apache/htdoc/; rm rf *'
Hasilnya bahwa HTMLDOC hanya akan menghasilkan kesalahan bukannya
menghapus seluruh direktori pohon karena tidak dapat menyelesaikan URL yang
memiliki sintaks ini.
Script Perl cukup sederhana, tidak ada modul pihak ketiga diperlukan,
sehingga Anda dapat menguji contoh ini dengan investasi sedikit waktu. Jika Anda
menjalankan di Linux, peluang sangat baik bahwa Anda dapat menjalankan
contoh ini segera karena Perl terinstal pada setiap distribusi terhormat. Jika Anda
menggunakan Windows, periksa ActiveState (http://www.activestate.com/)
distribusi ActivePerl.
Seperti languages.pl, script PHP ditampilkan di sini adalah bukan
pengetahuan roket, tetapi hanya memanggil script Perl, menetapkan bahwa
hasilnya akan ditempatkan ke dalam array bernama $result. Isi dari $result
tersebut kemudian output ke browser:
<?php
$outcome = exec("languages.pl", $results);
foreach ($results as $result) echo $result;
?>
Hasilnya adalah sebagai berikut:
<?php
header("ContentType:image/png");
passthru("giftopnm cover.gif | pnmtopng > cover.png");
?>
Ringkasan
Meskipun Anda tentu dapat pergi dengan sangat jauh dengan menggunakan
hanya PHP untuk membangun aplikasi Web yang menarik dan kuat, kemampuan
tersebut sangat diperluas ketika fungsi terintegrasi dengan platform yang
mendasarinya dan teknologi lain. Sebagaimana diterapkan pada bab ini, teknologi
ini meliputi operasi yang mendasarinya dan sistem file. Anda akan melihat tema
ini berulang kali seluruh sisa dari buku ini, seperti kemampuan PHP untuk
antarmuka dengan berbagai teknologi seperti LDAP, SOAP, dan Layanan Web
yang diperkenalkan.
Dalam bab berikutnya, Anda akan diperkenalkan dengan PHP dan Aplikasi
Extension Repository (PEAR) dan komunitas online penyimpanan untuk
mendistribusikan dan berbagi kode.
CHAPTER 11
PEAR
Programmer yang Baik menulis kode yang solid, sedangkan programmer hebat
menggunakan kembali kode programmer yang baik. Untuk programmer PHP,
PEAR, singkatan untuk PHP Extension dan Aplikasi Repository, adalah salah satu
cara yang paling efektif untuk mencari dan menggunakan kembali kode PHP yang
solid. Terinspirasi oleh Perl CPAN yang sangat populer (Comprehensive Perl
Archive Network), PEAR proyek dimulai pada tahun 1999 oleh pengembang PHP
Stig Bakken, dengan rilis kestabilan pertama dibundel bersama versi PHP 4.3.0.
Secara formal didefinisikan, PEAR adalah framework dan sistem distribusi
untuk komponen PHP dapat digunakan kembali dan saat ini menawarkan lebih
dari 400 paket dikelompokkan dalam 37 topik yang berbeda. Karena kontribusi
PEAR secara teliti ditinjau oleh komunitas sebelum mereka diterima, kode kualitas
dan kepatuhan pada pedoman pengembangan standar PEAR's terjamin.
Selanjutnya, karena banyak paket PEAR secara logika menerapkan tugas umum
dijamin untuk berulang kali terjadi tidak peduli jenis aplikasi, mengambil
keuntungan dari layanan ini berbasis komunitas akan menghemat berjam-jam
waktu pemrograman.
Bab ini dikhususkan untuk sebuah diskusi yang cermat tentang PEAR,
menawarkan topik-topik berikut:
Survei beberapa paket PEAR populer, dimaksudkan untuk memberikan
gambaran betapa berguna repositori ini.
Pengenalan terhadap PEAR Package Manager, yang merupakan program
command-line yang menawarkan antarmuka yang sederhana dan efisien untuk
MDB2: paket MDB2 menyediakan query berorientasi objek API untuk abstrak
komunikasi dengan lapisan database. Ini memberi Anda kemudahan transparan
migrasi aplikasi dari satu database ke yang lain, berpotensi semudah
memodifikasi satu baris kode. Saat ini ada delapan database yang didukung,
meliputi FrontBase, Interbase, Microsoft SQL Server, MySQL, MySQLi, Oracle
7/8/9/XE, PostgreSQL, dan SQLite. Karena proyek MDB2 adalah gabungan dari
dua proyek yang sudah ada sebelumnya, yaitu DB dan metabase, dan DB memiliki
dukungan untuk dBase, Informix, MiniSQL, ODBC, dan Sybase, yang akan
membayangkan dukungan untuk database ini akan segera ditambahkan ke MDB2,
biasanya kelas atau fungsi library. Paket PHPUnit memfasilitasi penciptaan,
pemeliharaan, meskipun pada saat penulisan tidak ada yang diumumkan. MDB2
juga mendukung simulasi query menggunakan pendekatan QuerySim.
Net_Socket: paket Net_Socket digunakan untuk mempermudah pengelolaan
TCP socket dengan menawarkan API umum untuk melaksanakan koneksi dan
membaca dan penulisan informasi diantara soket.
Net_SMTP: Paket Net_SMTP menawarkan pelaksanaan SMTP, sehingga mudah
bagi Anda untuk melaksanakan tugas seperti menghubungkan dan memutuskan
hubungan dari server SMTP, melakukan autentikasi SMTP, mengidentifikasi
pengirim, dan mengirim mail.
PHPUnit : Tes unit adalah khususnya menguji metodologi untuk menjamin
operasi yang tepat dari blok (atau unit) kode, biasanya kelas atau fungsi library.
Paket PHPUnit memfasilitasi penciptaan, pemeliharaan, dan eksekusi tes unit
dengan menetapkan seperangkat umum pedoman struktural dan cara untuk
mengotomatisasi menguji.
XML_Parser: Paket XML_Parser menawarkan solusi berorientasi objek yang
mudah untuk menguraikan file XML.
Jika Anda belum dimulai mengambil keuntungan dari PEAR, kemungkinan Anda
telah menghabiskan upaya yang signifikan dan waktu berulang kali menerapkan
beberapa fitur ini. Namun, ini hanya segelintir dari apa yang tersedia; mengambil
beberapa waktu untuk membaca dengan teliti http://pear.php.net/ untuk solusi
yang lebih.
Misalkan Anda baru-baru ini disewa untuk membuat sebuah situs web baru
untuk produser film. Seperti kita semua tahu, ada produser yang serius
menggunakan angka Romawi untuk mewakili tahun, dan manajer produk
memberitahu Anda bahwa setiap tanggal pada situs web harus muncul dalam
format ini. Luangkan waktu untuk berpikir tentang kebutuhan ini karena
memenuhi tidak semudah kedengarannya. Tentu saja, Anda bisa melihat sebuah
tabel konversi online dan hard-kode nilai, tapi bagaimana Anda memastikan
bahwa tahun hak cipta situs di halaman footer selalu up to date? Kau hanya akan
menyelesaikan untuk malam panjang coding ketika Anda berhenti sejenak untuk
mempertimbangkan apakah orang lain telah mengalami masalah yang sama.
"Tidak mungkin," kau menggerutu, tetapi mengambil momen cepat untuk
mencari PEAR tentunya akan bernilai masalah. Anda menelusuri atas dan, cukup
yakin, menemukan Numbers_Roman. Untuk tujuan latihan ini, anggap bahwa
paket Numbers_Roman telah terinstal pada server. Jangan khawatir terlalu
banyak tentang ini sekarang karena Anda akan belajar cara menginstal paket pada
bagian berikutnya. Jadi bagaimana Anda akan pergi tentang memastikan tahun
saat ini ditampilkan pada footer? Dengan menggunakan script berikut:
<?php
// Make the Numbers_Roman package available
require_once("Numbers/Roman.php");
// Retrieve current year
$year = date("Y");
// Convert year to Roman numerals
$romanyear = Numbers_Roman::toNumeral($year);
// Output the copyright statement
echo "Copyright © $romanyear";
?>
Moral dari cerita ini? Meskipun Anda mungkin berpikir bahwa masalah tertentu
tidak jelas, programmer lain mungkin menghadapi masalah yang sama, dan jika
Anda cukup beruntung, solusi sudah tersedia dan Anda untuk mengambil.
Menginstal PEAR
Instalasi PEAR baik pada Unix dan Windows adalah masalah sepele, dilakukan
dengan menjalankan script tunggal. Instruksi untuk kedua sistem operasi
disediakan dalam dua subbagian berikut.
Demi kemudahan, Anda juga harus menambahkan path direktori instalasi PHP
pada lingkungan variabel PATH sehingga perintah PEAR dapat dengan mudah
dijalankan. Pada akhir proses instalasi, file registri bernama PEAR_ENV.reg dibuat.
Pelaksana file ini akan menciptakan variabel lingkungan untuk sejumlah PEARspesifik variabel. Meskipun tidak kritis, menambahkan variabel ini ke path sistem
memberi Anda kenyamanan dalam melaksanakan PEAR Package Manager dari
lokasi sementara pada prompt perintah Windows.
CHAPTER 12
Date and Time
Informasi berbasis Waktu-dan tanggal memainkan peran penting dalam hidup kita
dan karenanya, programmer umumnya harus bertengkar dengan data sementara
secara teratur. Kapan tutorial diterbitkan? Apakah informasi harga untuk produk
tertentu baru-baru ini? Pukul berapa log kantor asisten ke dalam sistem
akuntansi? Apa jam sehari halnya situs Web perusahaan melihat lalu lintas
pengunjung sebagian besar? ini dan banyak Pertanyaan waktu berorientasi
muncul secara teratur, membuat akuntansi yang tepat dari hal tersebut sangat
penting bagi keberhasilan upaya program Anda. Bab ini memperkenalkan date
PHP yang kuat dan kemampuan manipulasi waktu. Setelah menawarkan beberapa
informasi awal tentang bagaimana menangani Unix dengan nilai date dan waktu,
pada bagian yang disebut "Date Fu" Anda akan belajar bagaimana bekerja dengan
waktu dan tanggal dalam beberapa cara berguna. Anda juga akan membuat
kalender kotak menggunakan dengan tepat bernama paket PEAR Calendar.
Akhirnya, tanggal jauh lebih baik dan fungsi manipulasi waktu yang tersedia pada
PHP 5.1 diperkenalkan.
Unix Timestamp
Pemasangan aspek sering-aneh di dunia kita ke dalam kendala ketat lingkungan
pemrograman bisa menjadi urusan membosankan. seperti Masalah secara khusus
menonjol ketika berhadapan dengan tanggal dan waktu. Misalnya, Anda
ditugaskan dengan menghitung selisih hari antara dua titik dalam waktu, namun
tanggal yang disediakan dalam format July 4, 2007 3:45pm and 7th of December,
2007 18:17. Seperti yang mungkin Anda bayangkan, mencari tahu bagaimana
Perhatian Anda mungkin ingin tahu apakah mungkin untuk bekerja dengan
tanggal sebelum zaman Unix (00:00:00 UTC January 1, 1970). Memang hal ini,
setidaknya jika Anda menggunakan sistem berbasis Unix. Pada Windows, karena
masalah overflow integer, kesalahan akan terjadi jika Anda mencoba untuk
menggunakan fungsi berorientasi timestamp dalam bab ini dalam hubungannya
dengan tanggal sebelum definisi zaman.
Memvalidasi Tanggal
Meskipun sebagian besar pembaca jelas bisa mengingat pembelajaran "Tigapuluh
Hari sesudah September" poem1 kembali pada sekolah dasar, itu tidak banyak
dari kita yang bisa membacanya, perusahaan saat ini mencakup. Untungnya,
fungsi checkdate() menyelesaikan tugas memvalidasi tanggal cukup baik,
mengembalikan TRUE jika date yang diberikan adalah benar, dan FALSE
sebaliknya. Prototipe nya berikut:
Boolean checkdate(int month, int day, int year)
Mari kita pertimbangkan contoh:
echo "April 31, 2007: ".(checkdate(4, 31, 2007) ? 'Valid' : 'Invalid');
// Returns false, because April only has 30 days
echo "<br />";
waktu. Jika timestamp tidak disediakan, timestamp Unix saat ini akan digunakan
pada tempatnya.
2. Anda sebenarnya dapat menggunakan date () untuk memformat Swatch Internet Time. Dibuat di
tengah-tengah ketidakwarasan dot-com, pembuat jam Swatch (http://www.swatch.com/) datang
dengan konsep "waktu Internet," yang dimaksudkan untuk melakukan jauh dengan konsep lama berat
zona waktu , bukan pengaturan waktu menurut "Swatch Beats.", Tidak mengherankan acuan universal
untuk menjaga Swatch Internet Time didirikan melalui meridian yang berada di kantor Swatch
perusahaan.
Mari kita coba presentasi yang lebih verbose dari date sekarang:
$weekday = date("l");
$daynumber = date("dS");
$monthyear = date("F Y");
printf("Today is %s the %s day of %s", $weekday, $daynumber, $monthyear);
Ini mengembalikan sebagai berikut:
Namun, karena tanda baca tidak bertentangan dengan salah satu parameter,
merasa bebas untuk menyisipkan sebagai yang diperlukan. Misalnya, untuk
memformat date sebagai mm-dd-yyyy, gunakan perintah berikut:
echo date("m-d-Y");
// 04-26-2007
Tentu saja, ini mungkin untuk menugaskan output ke array dan kemudian
referensi setiap elemen yang diperlukan:
$time = gettimeofday();
$GMToffset = $time['minuteswest'] / 60;
printf("Server location is %d hours west of GMT.", $GMToffset);
Ini mengembalikan sebagai berikut:
echo time();
Hal ini menghasilkan timestamp yang sesuai:
echo mktime(16,24,00,2,24,2007);
Ini mengembalikan sebagai berikut:
Hal ini sangat berguna untuk menghitung perbedaan antara dua titik dalam
waktu. Sebagai contoh, berapa jam yang ada antara sekarang (4 Juni 2007) dan
tengah malam April 15, 2008?
$now = mktime();
$taxday = mktime(0,0,0,4,15,2008);
// Difference in seconds
$difference = $taxday - $now;
// Calculate total hours
$hours = round($difference / 60 / 60);
echo "Only $hours hours until tax day!";
Date Fu
Bagian ini menunjukkan beberapa tugas yang berhubungan dengan tanggal yang
paling sering diminta, beberapa di antaranya hanya melibatkan satu fungsi dan
lain-lain yang melibatkan beberapa kombinasi dari beberapa fungsi.
Tip Pada beberapa sistem berbasis Unix, Anda dapat menentukan Lokal yang
didukung dengan menjalankan perintah locale -a.
Hal ini mungkin untuk menentukan lokal untuk sebuah klasifikasi data tertentu.
Enam kategori yang berbeda yang didukung:
LC_ALL: Ini menetapkan aturan lokalisasi untuk semua dari lima kategori berikut.
LC_COLLATE: String pembanding. Hal ini berguna untuk bahasa yang
menggunakan karakter seperti dan .
$tickets = 2;
$departure_time = 1118837700;
$return_time = 1119457800;
$cost = 1350.99;
?>
Numero di biglietti: <?php echo $tickets; ?><br />
Orario di partenza: <?php echo strftime("%d %B, %Y", $departure_time); ?><br />
Orario di ritorno: <?php echo strftime("%d %B, %Y", $return_time); ?><br />
Prezzo IVA incluso: <?php echo money_format('%i', $cost); ?><br />
date() dan getlastmod (). fungsi getlastmod () mengembalikan nilai dari halaman
header Modifikasi terakhir, atau FALSE dalam kasus error. Prototipe nya berikut:
int getlastmod()
Jika Anda menggunakannya bersama bersama date (), memberikan
informasi mengenai waktu modifikasi halaman terakhir dan tanggal yang sepele:
$lastmod = date("F d, Y h:i:sa", getlastmod());
echo "Page last modified on $lastmod";
Bagaimana dengan sepuluh minggu dan dua hari dari hari ini (25 Februari
2007)?
$futuredate = strtotime("10 weeks 2 days");
echo date("F d, Y", $futuredate);
Ini mengembalikan sebagai berikut:
Sebelum Anda dapat mulai mengambil keuntungan dari paket yang kuat,
anda perlu menginstalnya. Anda belajar tentang proses instalasi paket PEAR
dalam Bab 11 tapi bagi anda yang belum sepenuhnya akrab dengan ini, langkahlangkah yang diperlukan direproduksi berikutnya.
Instalasi Kalender
Untuk memanfaatkan atas semua fitur Kalender, Anda juga perlu menginstal
paket Tanggal. Mari kita memelihara baik selama proses instalasi Kalender, yang
berikut:
%>pear install -a -f Date
tanda -f disertakan ketika menginstal Kalender sini karena, pada saat tulisan ini,
Kalender masih rilis beta. Pada saat publikasi, Kalender bisa secara resmi stabil,
berarti Anda tidak akan perlu untuk memasukkan tanda ini. Lihat Bab 11 untuk
pengenalan lengkap untuk PEAR dan perintah instal.
Tabular date classes: Digunakan untuk membangun bulanan dan kotak berbasis
kalender mingguan. Tiga kelas ini yang tersedia: Calendar_Month_Weekdays,
Calendar_Month_Weeks, dan Calendar_Week. Kelas-kelas ini berguna untuk
membangun kalender bentuk tabel bulanan di harian dan format mingguan, dan
kalender bentuk tabel mingguan dalam format tujuh-hari, masing-masing.
01 <?php
02 require_once 'Calendar/Month/Weekdays.php';
03
04 $month = new Calendar_Month_Weekdays(2006, 4, 0);
05
06 $month->build();
07
08 echo "<table class='calendar'>\n";
09 echo "<tr><th>April, 2006</th></tr>";
10 echo "<tr><td>Su</td><td>Mo</td><td>Tu</td><td>We</td>
11
<td>Th</td><td>Fr</td><td>Sa</td></tr>";
if ($day->isFirst()) {
14
15
echo "<tr>";
}
16
17
if ($day->isEmpty()) {
18
19
echo "<td> </td>";
} else {
20
21
22
echo '<td>'.$day->thisDay()."</td>";
}
23
if ($day->isLast()) {
24
25
echo "</tr>";
}
26 }
27
28 echo "</table>";
29 ?>
Line 02: Karena Anda ingin membangun sebuah kalender kotak yang mewakili
bulan, kelas Calendar_Month_Weekdays diperlukan. Baris 02 membuat kelas ini
tersedia untuk script.
Line 04: Kelas Calendar_Month_Weekdays adalah instantiated, dan tanggal diatur
untuk April, 2006. Kalender harus ditata dari Minggu sampai Sabtu, sehingga
parameter ketiga diatur ke 0, yang merupakan perwakilan dari Minggu numerik
dikurangkan (1 untuk Senin, 2 untuk Selasa, dll).
Line 06: metode build () menghasilkan array yang terdiri dari semua tanggal yang
ditemukan pada bulan.
Line 12: loop while dimulai, bertanggung jawab untuk siklus melalui setiap hari
bulan tersebut.
Lines 1315: Jika $Day adalah hari pertama dalam minggu itu, output tag <tr>.
Lines 1721: Jika $Day kosong, output sel kosong. Jika tidak, output jumlah hari.
Lines 2325: Jika $Day adalah hari terakhir dalam seminggu, output tag </ tr>.
Memformat Tanggal
format tanggal dan waktu untuk output, atau mudah mengambil komponen
tunggal, Anda dapat menggunakan method format (). Metode ini menerima
parameter yang sama dengan fungsi date (). Misalnya, untuk keluaran tanggal dan
waktu menggunakan format 2007-02-27 09:55:00pm Anda akan memanggil
format () seperti:
echo $date->format("Y-m-d h:i:sa");
Ringkasan
Bab ini mencakup cukup sedikit bahan, dimulai dengan tinjauan dari beberapa
tanggal dan fungsi waktu yang muncul hampir setiap hari dalam tugas-tugas
pemrograman PHP yang khas. Selanjutnya adalah perjalanan ke dalam seni kuno
Tanggal Fu, di mana Anda belajar bagaimana untuk menggabungkan kemampuan
fungsi ini untuk melaksanakan tugas kronologis yang berguna. Anda juga
membaca tentang paket PEAR Kalender yang berguna, di mana Anda belajar
bagaimana untuk membuat kalender berbasis bentuk kotak dan mekanisme
validasi dan navigasi. Akhirnya, pengantar PHP 5.1 fitur-manipulasi tanggal
berorientasi objek telah disediakan.
Bab selanjutnya berfokus pada topik yang mungkin bertanggung jawab atas
lembing ketertarikan Anda dalam mempelajari lebih banyak tentang PHP:
interaktif pengguna. Kita akan melompat ke dalam pengolahan data melalui
formulir, menunjukkan baik fitur dasar dan Topik lanjutan seperti bagaimana
bekerja dengan komponen form multivalue dan generasi form otomatis. Anda
juga akan belajar bagaimana untuk memudahkan navigasi user dengan
menciptakan jalur navigasi tepung roti dan kustom 404 pesan.
CHAPTER 13
Forms
Anda dapat membuang tentang istilah teknis seperti hubungan database, Web
Services, penanganan session, dan LDAP, tetapi ketika datang ke sana, Anda mulai
belajar PHP karena Anda ingin membangun keren, situs Web interaktif. Setelah
semua, salah satu aspek yang paling memikat Web adalah bahwa hal itu dua cara
media; Web tidak hanya memungkinkan Anda untuk mempublikasikan informasi
tetapi juga menawarkan cara yang efektif untuk berinteraksi dengan rekan-rekan,
klien, dan teman-teman. Bab ini memperkenalkan salah satu cara yang paling
umum dimana Anda dapat menggunakan PHP untuk berinteraksi dengan user:
form Web.
Sebagian besar materi dalam bab ini harus cukup sederhana untuk
memahami, namun pemahaman sangat penting bagi siapa saja yang tertarik
dalam membangun bahkan dasar situs web. Secara total, bab ini membahas Topik
sebagai berikut:
Memahami konsep dasar PHP dan form Web
Melewati data form ke fungsi PHP
Bekerja dengan komponen form multivalued
Mengambil keuntungan dari PEAR: paket HTML_QuickForm
Menciptakan mekanisme secara otomatis pelengkapan
contoh sederhana
script berikut membuat form yang meminta pengguna untuk namanya dan alamat
e-mail. Setelah selesai dan dikirimkan, script (bernama subscribe.php)
menampilkan informasi ini kembali ke jendela browser.
<?php
// If the name field is filled in
if (isset($_POST['name']))
{
$name = htmlentities($_POST['name']);
$email = htmlentities($_POST['email']);
printf("Hi %s! <br />", $name);
printf("The address %s will soon be a spam-magnet! <br />", $email);
}
?>
<form action="subscribe.php" method="post">
<p>
Name:<br />
<input type="text" id="name" name="name" size="20" maxlength="40" />
</p>
<p>
Email Address:<br />
<input type="text" id="email" name="email" size="20" maxlength="40" />
</p>
<input type="submit" id="submit" name = "submit" value="Go!" />
</form>
Dengan asumsi bahwa pengguna menyelesaikan kedua bidang dan klik Go!
button, output yang sama untuk berikut ini akan ditampilkan:
Dalam contoh ini form mengacu ke skrip yang ditemukan, bukan script lainnya.
Meskipun kedua praktek secara teratur digunakan, ini cukup biasa untuk merujuk
pada dokumen yang berasal dan menggunakan logika kondisional untuk
menentukan tindakan yang harus dilakukan. Dalam hal ini, logika kondisional
menyatakan bahwa pernyataan echo hanya akan terjadi jika pengguna telah
dikirimkan (diposting) form.
Dalam kasus di mana Anda posting data kembali ke script yang sama dari
mana ia berasal, seperti pada contoh sebelumnya, Anda dapat menggunakan
variabel PHP superglobal $_SERVER['PHP_SELF']. Nama dari script yang sedang
dijalankan secara otomatis ditetapkan untuk variabel ini; Oleh karena itu,
menggunakannya sebagai pengganti nama file yang sebenarnya akan menyimpan
beberapa modifikasi kode tambahan yang harus nama file kemudian berubah.
Sebagai contoh, tag <form> pada contoh sebelumnya dapat dimodifikasi sebagai
berikut dan masih menghasilkan hasil yang sama:
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
$name = htmlentities($_POST['name']);
$email = htmlentities($_POST['email']);
printf("Hi %s<br />", $name);
if (validateEmail($email))
printf("The address %s is valid!", $email);
else
printf("The address <strong>%s</strong> is invalid!", $email);
}
?>
<form action="subscribe.php" method="post">
<p>
Name:<br />
<input type="text" id="name" name="name" size="20" maxlength="40" />
</p>
<p>
E-mail Address:<br />
<input type="text" id="email" name="email" size="20" maxlength="40" />
</p>
<input type="submit" id="submit" name = "submit" value="Go!" />
</form>
HTML untuk beberapa kotak-pilih ditunjukkan pada Gambar 13-1 akan terlihat
seperti ini:
<select name="languages[]" multiple="multiple">
<option value="csharp">C#</option>
<option value="jscript">JavaScript</option>
<option value="perl">Perl</option>
<option value="php">PHP</option>
</select>
Karena komponen ini multivalued, form prosesor harus dapat mengenali bahwa
mungkin ada beberapa nilai yang ditempatkan ke variabel form single. Dalam
contoh sebelumnya, perhatikan bahwa menggunakan kedua bahasa nama untuk
masukan bahasa beberapa acuan. Bagaimana PHP menangani masalah ini?
Mungkin tidak mengherankan, dengan mempertimbangkan itu array. Untuk
membuat PHP mengakui bahwa beberapa nilai mungkin ditugaskan untuk sebuah
variabel form single, Anda perlu membuat perubahan kecil untuk nama item
form, menambahkan sepasang kurung kotak untuk itu. Oleh karena itu, bukan
languages, nama akan membaca languages []. Setelah diganti, PHP akan
memperlakukan variabel diposting sama seperti array lainnya. Pertimbangkan
contoh lengkap pada script multiplevaluesexample.php:
<?php
if (isset($_POST['submit']))
{
echo "You like the following languages:<br />";
foreach($_POST['languages'] AS $language) {
$language = htmlentities($language);
echo "$language<br />";
}
}
?>
<form action="multiplevaluesexample.php" method="post">
What's your favorite programming language?<br /> (check all that apply):<br />
<input type="checkbox" name="languages[]" value="csharp" />C#<br />
<input type="checkbox" name="languages[]" value="jscript" />JavaScript<br />
Jika pengguna memilih languages C # dan PHP, dia disambut dengan output
sebagai berikut:
Menginstal HTML_QuickForm
Untuk memanfaatkan fitur HTML_QuickForm, Anda perlu menginstalnya dari
PEAR. Karena tergantung pada HTML_Common, paket PEAR lainnya mampu
menampilkan dan memanipulasi kode HTML, anda perlu menginstal
HTML_Common juga, yang dilakukan secara otomatis dengan melewatkan - tanda
onlyreqdeps dengan perintah menginstal:
paket bagus ini tidak mampu untuk memperkirakan seperti apa kendala khusus
data yang disediakan pengguna akan memiliki; jadi berhati-hati-khusus untuk
berpikir tentang hal-hal seperti sebelum meletakkan fasilitas validasi
HTML_QuickForm untuk bekerja.
Menggunakan Filter
HTML_QuickForm menyediakan cara untuk melewatkan data melalui sebuah
filter, yang dapat melakukan apapun analisis anda Harap. Filter ini sebenarnya
fungsi, dan Anda dapat menggunakan semua fungsi built-in PHP, atau Anda dapat
membuat sendiri. Misalnya, Anda membuat jaringan intranet perusahaan yang
membutuhkan karyawan untuk log in menggunakan nomor identifikasi karyawan
mereka, yang terdiri dari bilangan bulat dan huruf kapital. Untuk tujuan
keamanan Anda Masuk setiap karyawan login, dan untuk alasan konsistensi Anda
ingin nomor identifikasi karyawan untuk bisa login menggunakan format huruf
besar yang tepat. Untuk melakukannya, Anda bisa memasang filter seperti:
$form->applyFilter('employeeid', 'strtoupper');
Menggunakan Aturan
Sementara Filter menawarkan metode yang tersirat untuk merapikan data
pengguna sebelum proses berlanjut , kadang-kadang Anda ingin tegas membatasi
user dari memasukkan bentuk-bentuk tertentu dari data, mencegah form dari
yang diproses sampai batasan tertentu terpenuhi. Misalnya, ketika meminta
pengguna untuk namanya, Anda akan ingin mencegah digit numerik agar tidak
melewati masuk. Oleh karena itu, sementara Jason Gilmore dan Bob Bryla adalah
nama yang valid, JasonGilmore1 dan B0b Bryla tidak. Tapi Anda tidak bisa hanya
menyaring digit, karena Anda tidak bisa yakin apa yang user dimaksudkan untuk
tipe. Oleh karena itu, kesalahan harus ditandai dan pengguna diberitahu tentang
masalah tersebut. Di sinilah aturan masuk
Aturan dapat dilembagakan untuk memberlakukan peraturan yang ketat
terhadap isi dari sebuah string, dan HTML_QuickForm dikemas dengan beberapa
peraturan-peraturan lebih umum siap untuk digunakan. Tabel 13-1 merangkum
apa yang Anda inginkan. Jika tidak ada peraturan ini memenuhi kebutuhan Anda,
Anda malah dapat menggunakan callback (juga tercantum dalam Tabel 13-1)
untuk membuat fungsi anda sendiri.
berikut
validasi
window
sebuah
<?php
require_once "HTML/QuickForm.php";
// Instantiate the HTML_QuickForm class
Menggunakan Autocomplete
HTML_QuickForm dilengkapi dengan fitur array luar biasa, dan permukaan yang
hampir tidak pernah tergores dalam bab ini. Di luar penciptaan form, validasi, dan
fitur pengolahan, HTML_QuickForm menawarkan sejumlah kemampuan canggih
dimaksudkan untuk lebih meningkatkan fitur form situs Web Anda. Salah satu
fitur tersebut adalah autocomplete.
Terkadang berguna untuk menyediakan pengguna dengan input teks dalam
bentuk-bebas daripada kotak drop-down yang mengandung nilai-nilai yang telah
ditetapkan, dalam kasus jawaban pengguna tidak salah satu dari pilihan yang
tersedia. Namun, karena ada kemungkinan yang signifikan pengguna akan
menentukan salah satu dari sejumlah set nilai, Anda ingin memfasilitasi input
pengguna dengan menggunakan auto-completion. Auto-completion bekerja
dengan memantau apa yang user mulai untuk diketik dalam kotak input dan
menyarankan nilai berdasarkan apa yang sudah masuk sejauh ini. Misalnya, Anda
sedang membangun sebuah situs Web fantasi sepak bola dan ingin
mengumpulkan informasi tentang tim sepak bola favorit masing-masing
pengguna. Sementara satu dapat menduga kebanyakan akan memilih NFL atau
tim perguruan tinggi, beberapa pemain muda bisa memilih untuk masuk tim
sekolah tinggi favorit. Sementara itu cukup sepele untuk menyusun sebuah daftar
tim NFL dan setidaknya tim perguruan tinggi yang terkenal, membuat daftar
serupa dari ribuan tim sekolah tinggi di seluruh negara ini akan sulit yang terbaik.
Oleh karena itu, Anda menggunakan kotak input teks dengan auto-completion
diaktifkan. Jika pengguna mulai memasuki Steel, mekanisme auto-lengkap akan
menawarkan hingga elemen array pertama yang sesuai, dimana adalah Steelers,
seperti yang ditunjukkan pada Gambar 13-2.
Namun, jika pengguna terus mengetik, mengubah string ke Steel (dengan spasi
penutup), auto-completion akan hadir Steel Gorden, seperti yang ditunjukkan
pada Gambar 13-3.
$element->setOptions($teams);
// Display the form
$form->display();
?>
Ringkasan
Salah satu kelebihan yang besar Web adalah kemudahan yang memungkinkan
kita ke tidak hanya menyebarkan, tetapi juga mengkompilasi dan keseluruhan
informasi pengguna. Namun, sebagai pengembang, ini berarti bahwa kita harus
menghabiskan sejumlah besar waktu membangun dan memelihara sejumlah
besar interface pengguna, banyak yang kompleks form HTML. Konsep-konsep
yang dijelaskan dalam bab ini harus memungkinkan Anda untuk mengurangi
waktu yang sedikit.
Selain itu, bab ini menawarkan beberapa strategi umum untuk
meningkatkan pengalaman pengguna umumnya aplikasi Anda. Meskipun bukan
merupakan daftar yang lengkap, mungkin materi yang disajikan dalam bab ini
akan bertindak sebagai batu loncatan bagi Anda untuk melakukan lebih lanjut
eksperimentasi serta membantu Anda mengurangi waktu yang Anda investasikan
dalam apa yang pasti salah satu aspek yang memakan waktu lebih banyak dari
pengembangan Web: meningkatkan pengalaman pengguna. Bab berikut
menunjukkan Anda bagaimana untuk melindungi area sensitif dari situs Web
Anda dengan memaksa pengguna untuk menyediakan username dan password
sebelum masuk.
CHAPTER 14
Authenticating Your Users
yaitu
$_SERVER['PHP_AUTH_USER']
and
metode tersebut, Anda perlu untuk menerapkan saluran komunikasi yang aman,
biasanya dicapai dengan menggunakan Secure Sockets Layer (SSL). SSL
Mendukung tersedia untuk semua arus utama server Web, termasuk Apache dan
Microsoft Internet Information Server (IIS).
PHP Authentication
Mengintegrasikan autentikasi pengguna langsung ke dalam logika aplikasi Web
Anda mudah dan fleksibel; mudah digunakan karena konsolidasi apa yang tidak
akan membutuhkan beberapa tingkat komunikasi interprocess, dan fleksibel
karena autentikasi terintegrasi menyediakan cara yang lebih sederhana untuk
mengintegrasikan dengan komponen lainnya dari aplikasi, seperti penyesuaian isi
dan penetapan hak istimewa pengguna. Sisa dari bab ini membahas fitur
autentikasi built-in PHP dan menunjukkan beberapa metodologi autentikasi yang
Anda dapat segera mulai memasukkan ke dalam aplikasi Anda.
Autentikasi Variabel
PHP menggunakan dua variabel terdefinisi untuk autentikasi pengguna:
$_SERVER['PHP_AUTH_USER'] dan $_SERVER['PHP_AUTH_PW']. Variabel
menyimpan nilai username dan password, masing-masing. Sementara
mengautentikasi adalah sederhana seperti membandingkan yang diharapkan
username dan password untuk variabel-variabel ini, ada dua batasan penting
untuk diingat ketika menggunakan ini variabel terdefinisi:
Kedua variabel harus diverifikasi pada awal setiap halaman dibatasi. Anda dapat
dengan mudah melakukannya dengan mengautentikasi pengguna sebelum
melakukan setiap tindakan lain pada halaman yang terbatas, yang umumnya
berarti menempatkan kode autentikasi dalam file terpisah dan kemudian
termasuk file di halaman dibatasi menggunakan fungsi require();
Variabel tersebut tidak berfungsi dengan baik dengan versi CGI dari PHP, dan
tidak berfungsi pada Microsoft IIS. Lihat sidebar tentang autentikasi PHP dan IIS.
isset()
fungsi isset () menentukan apakah variabel telah diberi nilai. Prototipe nya
berikut:
boolean isset(mixed var [, mixed var [,...]])
Akan mengembalikan TRUE jika variabel berisi nilai, dan FALSE jika tidak.
Seperti yang diterapkan untuk autentikasi pengguna, Fungsi isset() berguna untuk
menentukan
apakah
$_SERVER['PHP_AUTH_USER']
dan
Hard-Kode Autentikasi
Cara paling mudah untuk membatasi akses sumber daya adalah dengan hardcoding username dan password langsung ke dalam script. Properti 14-2
menawarkan contoh bagaimana untuk menyelesaikan hal ini.
Dalam
contoh
ini,
jika
$_SERVER['PHP_AUTH_USER']
dan
$_SERVER['PHP_AUTH_PW'] adalah sama untuk specialuser dan secretpassword,
masing-masing blok kode tidak akan dieksekusi, dan apa pun berikutnya blok yang
akan mengeksekusi. Sebaliknya, pengguna diminta untuk mengisi username dan
password sampai baik informasi yang memadai atau pesan 401 Unauthorize
ditampilkan karena kegagalan beberapa autentikasi. Meskipun autentikasi
terhadap nilai hard-coded ini sangat cepat dan mudah untuk mengkonfigurasi, ia
akses ke server mungkin dapat melihat informasi login jika hak akses file tidak
dikonfigurasi dengan benar. Script PHP diperlukan untuk mengurai file ini dan
autentikasi pengguna terhadap pasangan login yang diberikan hanya agak lebih
rumit daripada script yang digunakan untuk autentikasi terhadap pasangan
autentikasi hard-coded. Perbedaannya terletak pada tugas script tambahan dari
membaca file teks ke dalam array, dan kemudian siklus melalui array mencari
kecocokan. Hal ini melibatkan penggunaan beberapa fungsi, meliputi sebagai
berikut:
file(string filename): fungsi file ()membaca file ke dalam array, dengan setiap
elemen dari array yang terdiri dari sebuah baris pada file tersebut.
explode(string separator, string string [, int limit]): fungsi explode() membelah
string ke dalam serangkaian substring, dengan setiap batas string ditentukan oleh
pemisah tertentu.
md5(string str): md5 () fungsi akan menghitung hash MD5 dari sebuah string,
menggunakan RSA Security Incs algoritma MD5 Message-Digest
(http://www.rsa.com/).
<?php
// Preset authentication status to false
$authorized = FALSE;
Meskipun sistem autentikasi berbasis file bekerja bagus untuk relatif kecil, daftar
autentikasi statis, strategi ini bisa menjadi agak tidak menyenangkan ketika Anda
wjgilmore 098f6bcd4621d373cade4e832627b4f6
mwade
jgennick 3c05ce06d51e9498ea472691cd811fb6
0e4ab1a5a6d8390f09e9a0f2d45aeb7f
*/
if (! isset($_SERVER['PHP_AUTH_USER'])) {
authenticate_user();
} else {
// Connect to the MySQL database
mysql_pconnect("localhost","authenticator","secret")
or die("Can't connect to database server!");
mysql_select_db("corporate")
or die("Can't select database!");
// Create and execute the selection query
$query = "SELECT username, pswd FROM userauth
WHERE username='$_SERVER[PHP_AUTH_USER]' AND
pswd=MD5('$_SERVER[PHP_AUTH_PW]')";
$result = mysql_query($query);
// If nothing was found, reprompt the user for the login information
if (mysql_num_rows($result) == 0) {
authenticate_user();
} else {
echo "Welcome to the secret archive!";
}
}
?>
Meskipun autentikasi Database lebih kuat dari dua metodologi yang diuraikan
sebelumnya, sebenarnya sangat sepele untuk melaksanakan. Cukup menjalankan
seleksi query terhadap tabel login, menggunakan username dan password
dimasukkan sebagai kriteria untuk query. Tentu saja, solusi tersebut tidak
tergantung pada penggunaan tertentu dari database MySQL, setiap Database
relasional dapat digunakan pada tempatnya.
BREAK
CHAPTER 15
Handling File Uploads
Memahami bahwa formulir ini hanya menawarkan bagian dari hasil yang
diinginkan, sedangkan tipe input file dan atribut lain terkait upload file cara
standarisasi dikirim ke server melalui suatu halaman HTML, tidak ada kemampuan
yang ditawarkan untuk menentukan apa yang terjadi setelah file tersebut sampai
di sana. Penerimaan dan penanganan selanjutnya dari file upload adalah fungsi
dari penanganan upload, dibuat menggunakan beberapa proses server, atau
kemampuan bahasa server-side seperti Perl, Java, atau PHP. Sisa dari bab ini
dikhususkan pada aspek proses upload.
BREAK
CHAPTER 16
Networking
Anda mungkin telah berpaling ke bab ini bertanya-tanya apa mungkin PHP
menawarkan dalam hal jaringan. Setelah semuanya, bukan tugas-tugas jaringan
terutama diturunkan ke bahasa yang umum digunakan untuk administrasi sistem,
seperti Perl atau Python? Sementara seperti stereotip mungkin sekali dilukis
gambaran yang cukup akurat, saat ini, menggabungkan kemampuan jaringan ke
dalam aplikasi Web adalah biasa. Bahkan, aplikasi berbasis web secara teratur
digunakan untuk memantau dan bahkan memelihara infrastruktur jaringan.
Selanjutnya, dengan pengenalan antarmuka baris perintah (CLI) dalam versi PHP
4.2.0, PHP kini semakin banyak digunakan untuk administrasi sistem di antara
pengembang yang ingin terus menggunakan bahasa favorit mereka untuk tujuan
lain. PHP pengembang, selalu tertarik untuk mengetahui kebutuhan yang tumbuh
di bidang pengembangan aplikasi web dan untuk memperbaiki permintaan
dengan memasukkan fitur-fitur baru ke dalam bahasa, telah mengumpulkan array
agak menakjubkan fungsionalitas jaringan khusus.
Bab ini dibagi menjadi beberapa bagian yang mencakup topik-topik berikut:
DNS, servers, and services: PHP menawarkan berbagai fungsi yang mampu
mengambil informasi mengenai jaringan internal, DNS, protokol, dan skema
alamat Internet. Bagian ini memperkenalkan fungsi-fungsi ini dan menawarkan
beberapa contoh penggunaan.
Sending e-mail with PHP: Mengirim e-mail melalui aplikasi Web tidak diragukan
lagi salah satu fitur yang paling biasa Anda dapat temukan hari ini, dan untuk
alasan yang baik. E-mail merupakan aplikasi pembunuh Internet dan menawarkan
cara yang luar biasa yang efisien untuk berkomunikasi dan memelihara data
penting dan informasi. Bagian ini menjelaskan cara mudah mengirim pesan
melalui skrip PHP. Selain itu, Anda akan belajar cara menggunakan paket PEAR
Mail dan Mail_Mime untuk memfasilitasi lebih kompleks kiriman e-mail, seperti
yang melibatkan beberapa penerima, format HTML, dan masuknya lampiran.
Common networking tasks: Pada bagian ini, anda akan belajar bagaimana
menggunakan PHP untuk meniru tugas yang biasa dilakukan oleh perangkat
command-line, termasuk ping sebuah alamat jaringan, melacak koneksi jaringan,
scanning port membuka server, dan banyak lagi.
Catatan Beberapa fungsi diperkenalkan dalam bab ini tidak bekerja pada
Windows. Check out paket PEAR Net_DNS untuk mengemulasikan kemampuan
mereka.
DNS
Domain Name System (DNS) adalah apa yang memungkinkan Anda untuk
menggunakan nama domain (misalnya example.com) di tempat dari alamat IP
yang sesuai tidak begitu-user-friendly, seperti 192.0.34.166. Nama domain dan
melengkapi alamat IP mereka yang disimpan dan tersedia untuk referensi di nama
domain server, yang diselingi di seluruh dunia. Biasanya, domain memiliki
beberapa jenis rekaman yang terkait untuk itu, salah satu pemetaan alamat IP ke
domain, satu lagi untuk mengarahkan e-mail, dan satu lagi untuk alias nama
domain, misalnya. Seringkali administrator jaringan dan pengembang
memerlukan cara untuk mempelajari lebih lanjut tentang berbagai DNS record
untuk domain yang diberikan. Bagian ini diperkenalkan sejumlah fungsi standar
PHP yang mampu menggali banyak informasi mengenai data DNS.
ulang aturan. Sebagai contoh, sebuah NAPTR dapat digunakan untuk menjaga
warisan (pra-DNS) pelayanan.
NS: Name Server Record. Menentukan nama server untuk host.
PTR: Pointer Record. Peta alamat IP untuk host.
SOA: Start of Authority Record. Mengatur global parameter untuk host.
SRV: Services Record. Menunjukkan lokasi berbagai layanan untuk domain yang
disediakan.
Pertimbangkan contoh. Misalnya anda ingin memastikan apakah nama
domain example.com memiliki rekaman DNS yang sesuai:
<?php
$recordexists = checkdnsrr("example.com", "ANY");
if ($recordexists) echo "The domain name has been reserved. Sorry!";
else echo "The domain name is available!";
?>
Anda juga dapat menggunakan fungsi ini untuk memverifikasi keberadaan sebuah
domain dari alamat email yang disediakan:
<?php
$email = "[email protected]";
$domain = explode("@",$email);
Perlu di ingat ini bukan permintaan untuk memverifikasi adanya record MX.
Terkadang administrator jaringan menggunakan metode konfigurasi lainnya untuk
memungkinkan resolusi mail tanpa menggunakan MX record (karena MX record
tidak wajib). Berbuat salah pada sisi peringatan, hanya memeriksa keberadaan
domain, tanpa secara khusus meminta verifikasi apakah MX record ada.
Selanjutnya, ini tidak memverifikasi apakah alamat e-mail benar-benar ada.
Satu-satunya cara yang pasti untuk membuat penentuan ini adalah untuk
mengirim user tersebut e-mail dan memintanya untuk memverifikasi alamat
dengan mengklik URL satu kali. Anda dapat mempelajari lebih lanjut tentang URL
satu kali dalam Bab 14.
Jika Anda hanya tertarik dalam record nama server, Anda bisa menjalankan
sebagai berikut:
<?php
$result = dns_get_record("example.com","DNS_CNAME");
print_r($result);
?>
Mengambil Records MX
CHAPTER 17
PHP and LDAP
Sebagai perusahaan perangkat keras dan infrastruktur perangkat lunak diperluas sepanjang
dekade terakhir, TI profesional menemukan diri mereka kewalahan dengan overhead
administrasi yang diperlukan untuk mengelola berkembang pesat jumlah sumber daya yang
ditambahkan ke perusahaan Printer, workstation, server, switch, dan lain aneka perangkat
jaringan semua diperlukan pemantauan berkelanjutan dan dikelola tidak efisien, seperti yang
dilakukan pengguna akses jaringan sumber daya dan hak istimewa.
Cukup sering sistem administrator dirakit secara sendiri modus operandi internal untuk
menjaga urutan, sistem yang terlalu sering yang dirancang dengan buruk, tidak aman, dan
nonscalable. Sebuah alternatif tapi juga solusi tidak efisien melibatkan penyebaran berbagai
sistem yang berbeda, masing-masing melakukan bagiannya sendiri untuk mengelola beberapa
perusahaan, namun datang dengan biaya overhead yang cukup besar karena kurangnya
integrasi. Hasilnya adalah bahwa baik pengguna dan administrator diderita dari tidak adanya
solusi manajemen yang komprehensif, setidaknya sampai layanan direktori datang.
Pelayanan direktori menawarkan administrator sistem, pengembang, dan pengguna
akhir sama cara konsisten, efisien, dan aman untuk melihat dan mengelola sumber daya seperti
orang, file, printer, dan aplikasi. Struktur dari inidioptimalkan membaca data repositori-sering
erat model struktur perusahaan fisik, contoh yang digambarkan pada Gambar 17-1.
Banyak vendor perangkat lunak terkemuka telah membangun andalan pelayanan
direktori produk dan memang berpusat keseluruhan operasi mereka di sekitar penawaran efek
tersebut. Berikut adalah beberapa produk yang lebih populer.
Fedora Directory Server: http://directory.fedoraproject.org/
Microsoft Active Directory: http://www.microsoft.com/activedirectory/
Novell eDirectory: http://www.novell.com/products/edirectory/
Oracle Collaboration Suite: http://www.oracle.com/collabsuite/
Semuanya secara luas digunakan pelayanan direktori produk sangat tergantung pada
sebuah kation-spesifik terbuka yang dikenal sebagai Lightweight Directory Access Protocol atau
LDAP. Dalam bab ini, anda akan belajar bagaimana mudahnya untuk membicarakan dengan
LDAP melalui ekstensi LDAP PHP. Pada akhirnya, Anda akan memiliki pengetahuan yang
diperlukan untuk mulai berbicara dengan layanan direktori melalui aplikasi PHP Anda. Karena
suatu bagian pengantar pada LDAP hampir tidak akan cukup untuk melakukan pengadilan topik,
ini diasumsikan Anda membaca bab ini karena Anda telah menjadi pengguna LDAP yang
berpengetahuan dan mencari informasi lebih lanjut tentang cara berkomunikasi kemampuan
baca untuk menyampaikan dengan server LDAP Anda menggunakan bahasa PHP. Jika Anda
tetapi, baru untuk topik ini, mempertimbangkan untuk mengambil beberapa waktu untuk
mengkaji sumber daya online berikut sebelum melanjutkan:
LDAP v3 specification (http://www.ietf.org/rfc/rfc3377.txt): The official specification of
Lightweight Directory Access Protocol Version 3
The Official OpenLDAP Web site (http://www.openldap.org/): The official Web site of
LDAPs widely used open source implementation
IBM LDAP Redbooks (http://www.redbooks.ibm.com/): IBMs free 700+ page
introduction to LDAP
CHAPTER 18
Session Handlers
Hari ini, menggunakan sesi HTTP untuk melacak informasi yang gigih seperti
preferensi pengguna dalam bahkan yang paling sederhana aplikasi lebih aturan
daripada pengecualian. Oleh karena itu, tidak peduli apakah Anda benar-benar
baru untuk pengembangan Web atau seorang veteran beruban memanggil dari
bahasa lain, Anda harus meluangkan waktu untuk dengan cermat membaca bab
ini. Tersedia sejak rilis versi 4.0, kemampuan PHP menangani session menjadi
salah satu fitur yang paling keren dan paling dibahas. Dalam bab ini Anda akan
mempelajari semua tentang fitur, termasuk:
Mengapa menangani session diperlukan, dan berguna
Bagaimana mengkonfigurasi PHP ke paling efektif menggunakan fitur ini
Bagaimana membuat dan menghancurkan session, dan menangani variabel
session
Mengapa Anda mungkin mempertimbangkan mengelola data session pada
database, dan bagaimana melakukannya.
pada apa yang umumnya disebut cookie, dengan cepat memperoleh penerimaan,
menawarkan beberapa bantuan teka-teki ini. Namun, keterbatasan pada ukuran
cookie dan jumlah cookie diijinkan, dan berbagai ketidaknyamanan sekitarnya
pelaksanaannya, diminta para pengembang untuk merancang solusi lain:
penanganan session.
Penanganan Session pada dasarnya adalah sebuah solusi cerdas untuk
masalah ini Tanpa Kewarganegaraan. Hal ini dicapai dengan menugaskan kepada
setiap pengunjung situs atribut identifikasi yang unik, dikenal sebagai session ID
(SID), dan kemudian berhubungan bahwa SID dengan sejumlah potongan data
lain, baik jumlah kunjungan bulanan, warna background favorit, atau nama
tengah-sebutkan saja semuanya. Dalam istilah database relasional, Anda bisa
memikirkan SID sebagai kunci utama bahwa mengikat semua pengguna lain
atribut bersamaan. Tapi bagaimana SID terus berkorelasi dengan pengguna,
mengingat perilaku tanpa kewarganegaraan HTTP? Hal ini dapat dilakukan dengan
dua cara berbeda:
Cookies: Salah satu cara cerdik untuk mengelola informasi pengguna
sebenarnya membangun pada metode asli menggunakan cookie. Bila pengguna
mengunjungi situs web, server menyimpan informasi tentang pengguna, seperti
preferensi mereka, di dalam cookie dan mengirimkannya ke browser, yang
menyimpannya. Sebagai pengguna mengeksekusi permintaan untuk halaman lain,
server mengambil informasi pengguna dan menggunakannya, misalnya, untuk
menyesuaikan halaman. Namun, daripada menyimpan preferensi pengguna pada
cookie, SID disimpan pada cookie. Sebagai klien menavigasi seluruh situs, SID yang
diambil ketika diperlukan, dan berbagai item data berkorelasi dengan SID
dilengkapi untuk digunakan dalam halaman. Sebagai klien menavigasi seluruh
situs, SID yang diambil ketika diperlukan, dan berbagai item data berkorelasi
dengan SID dilengkapi untuk digunakan dalam halaman. Selain itu, karena cookie
dapat tetap pada klien bahkan setelah session berakhir, itu bisa dibaca pada
selama session berikutnya, yang berarti kegigihan dipelihara bahkan di jangka
waktu yang lama dan tidak aktif. Namun, perlu diingat karena penerimaan cookie
suatu hal pada akhirnya dikendalikan oleh klien, Anda harus siap untuk
valid tidak ada, salah satu dihasilkan dan berhubungan dengan pengguna yang
menggunakan salah satu metode propagasi SID dijelaskan sebelumnya.
PHP menentukan apakah session sudah ada dengan menemukan SID baik
dalam URL yang diminta atau dalam cookie. Namun, Anda juga mampu
melakukannya secara terprogram. Sebagai contoh, jika nama session sid dan ini
ditambahkan ke URL, Anda bisa mengambil nilai dengan variabel berikut:
$_GET['sid']
Jika disimpan dalam cookie, Anda dapat mengambilnya seperti ini:
$_COOKIE['sid']
Setelah diambil, Anda dapat memulai informasi berhubungan dengan SID atau
mengambil data SID berhubungan sebelumnya. Sebagai contoh, anggaplah bahwa
pengguna browsing berbagai artikel berita situs. Artikel pengidentifikasi dapat
dipetakan ke SID pengguna, memungkinkan Anda untuk menyusun sebuah daftar
artikel yang pengguna telah membaca, dan menampilkan daftar itu sebagai
pengguna berlanjut untuk navigasi. Dalam bagian yang akan datang, Anda akan
belajar bagaimana untuk menyimpan dan mengambil informasi session ini.
Proses ini berlanjut sampai pengguna baik menutup browser atau menavigasi ke
situs luar. Jika Anda menggunakan cookie, dan tanggal kedaluwarsa cookie telah
diatur untuk tanggal tertentu di masa depan, pengguna harus kembali ke situs
sebelum tanggal kadaluwarsa, session bisa dilanjutkan seperti bila pengguna tidak
pernah pergi. Jika Anda menggunakan URL rewriting, session secara pasti lebih
dari, dan baru salah satu harus dimulai pada saat pengguna mengunjungi situs.
Dalam bagian-bagian yang akan datang, Anda akan belajar tentang perintah
konfigurasi dan fungsi yang bertanggung jawab untuk melaksanakan proses ini.
Instruksi Konfigurasi
Hampir 30 perintah konfigurasi yang bertanggung jawab atas perilaku
penanganan session-tweak PHP. Karena banyak dari arahan memainkan peranan
penting dalam menentukan perilaku ini, Anda harus meluangkan waktu untuk
menjadi akrab dengan arahan dan pengaturan kemungkinan mereka. Yang paling
relevan diperkenalkan di bagian ini.
public: Pengaturan ini dianggap semua dokumen disimpan di cache, bahkan jika
permintaan dokumen awal memerlukan otentikasi.
Memulai Session
Ingatlah bahwa HTTP menyadari baik kondisi pengguna lalu dan masa
depan. Karena itu, Anda perlu secara eksplisit memulai dan kemudian
melanjutkan session dengan setiap permintaan. Kedua tugas dilakukan
menggunakan fungsi session_start (). nya prototipe terlihat seperti ini:
boolean session_start()
Menjalankan session_start () akan membuat session baru jika SID tidak
ditemukan, atau melanjutkan session saat ini jika SID ada. Anda menggunakan
fungsi hanya dengan menyebutnya seperti ini:
session_start();
Catatan bahwa fungsi session_start () melaporkan hasil yang sukses
terlepas dari hasilnya. Oleh karena itu, menggunakan setiap jenis penanganan
pengecualian dalam hal ini akan terbukti sia-sia.
Anda dapat menghilangkan pelaksanaan fungsi ini sama sekali dengan
mengaktifkan direktif konfigurasi session.auto_start. Perlu diingat, bahwa ini akan
memulai atau melanjutkan session untuk setiap halaman PHP diaktifkan.
Menghancurkan Session
Meskipun Anda dapat mengkonfigurasi direktif -penanganan session PHP untuk
secara otomatis menghancurkan sebuah session berdasarkan waktu berakhir atau
probabilitas, Terkadang berguna untuk secara manual membatalkan session
sendiri. Sebagai contoh, Anda mungkin ingin memungkinkan pengguna untuk
secara manual log out dari situs Anda. Ketika pengguna mengklik link yang sesuai,
Anda dapat menghapus variabel session dari memori, dan bahkan sepenuhnya
menghapus sesi dari penyimpanan, dilakukan melalui fungsi session_unset () dan
session_destroy (), masing-masing.
session_start();
echo "Your session identification number is ".session_id();
?>
Hal ini menghasilkan output yang sama sebagai berikut:
<?php
session_start();
$_SESSION['username'] = "jason";
printf("Your username is %s.", $_SESSION['username']);
?>
Perhatian Anda mungkin menemukan sumber belajar yang lebih tua dan diskusi
grup berita merujuk pada fungsi session_register () dan session_unregister
(),dimana dulunya cara yang direkomendasikan untuk membuat dan
menghancurkan variabel session, masing. Namun, karena fungsi ini bergantung
pada direktif konfigurasi yang disebut register_globals, yang dinonaktifkan secara
default pada PHP 4.2.0, dan dihapus seluruhnya pada PHP 6.0, Anda malah harus
menggunakan penugasan variabel dan metode penghapusan seperti yang
dijelaskan dalam bagian ini.
Encoding dan Decoding Data Session
Terlepas dari media penyimpanan, PHP menyimpan data session dalam format
standar yang terdiri dari sebuah string tunggal. Sebagai contoh, isi dari suatu
session terdiri dari dua variabel, yaitu username dan loggedon, ditampilkan di sini:
username|s:5:"jason";loggedon|s:20:"Feb 16 2008 22:32:29";
Setiap referensi variabel session dipisahkan oleh titik koma dan terdiri dari tiga
komponen: nama, panjang, dan nilai. Sintaks umum berikut:
name|s:length:"value";
Syukurlah, PHP menangani session encoding dan decoding secara mandiri.
Namun, terkadang Anda mungkin ingin untuk melaksanakan tugas ini secara
manual. Dua fungsi yang tersedia untuk melakukannya: session_encode () dan
session_decode (), masing-masing.
This returns:
Catatan Jika Anda tidak terbiasa dengan database MySQL dan bingung dengan
sintaks yang ditemukan dalam contoh berikut, memikirkan untuk melihat kembali
material yang ada di Bab 30.
<?php
session_start();
// Has a session been initiated previously?
if (! isset($_SESSION['username'])) {
// If no previous session, has the user submitted the form?
if (isset($_POST['username']))
{
$username = mysqli_real_escape_string($_POST['username']);
$pswd = mysqli_real_escape_string($_POST['pswd']);
// Connect to the MySQL server and select the database
mysql_connect("localhost","webuser","secret");
mysql_select_db("chapter18");
// Look for the user in the users table.
$query = "SELECT username FROM users
WHERE username='$username' AND pswd='$pswd'";
$result = mysql_query($query);
// Has the user been located?
if (mysql_numrows($result) == 1)
{
$_SESSION['username'] = mysql_result($result,0,"username");
echo "You've successfully logged in. ";
}
// If the user has not previously logged in, show the login form
} else {
include "login.html";
}
// The user has returned. Offer a welcoming note.
} else {
printf("Welcome back, %s!", $_SESSION['username']);
}
?>
Pada saat pengguna dibanjiri dengan kebutuhan untuk mengingat username dan
password untuk setiap jenis dibayangkan layanan online, dari memeriksa e-mail
untuk pembaharuan buku perpustakaan untuk meninjau sebuah rekening bank,
memberikan fitur login secara otomatis ketika situasi memungkinkan tentunya
akan disambut oleh pengguna Anda.
CHAPTER 21
Secure PHP Programming
Setiap situs web dapat dianggap sebagai sebuah istana selalu diserang oleh lautan
orang biadab. Dan sebagai sejarah dari kedua menunjukkan perang konvensional
dan informasi, sering kemenangan penyerang 'tidak sepenuhnya tergantung pada
derajat mereka keahlian atau licik, tetapi lebih pada pengawasan dengan
pertahanan. Sebagai penjaga kerajaan elektronik, anda berhadapan tanpa
sejumlah kecil ingresses potensial dari malapetaka yang bisa dikerjakan, mungkin
terutama sebagai berikut:
Kelemahan Software : biasanya server database, server Web, dan satu atau lebih
bahasa pemrograman, semua yang dapat berjalan pada satu atau lebih sistem
operasi. Oleh karena itu, penting untuk terus-menerus mengikuti perkembangan
kelemahan terbuka dan mengambil langkah yang diperlukan untuk patch masalah
sebelum seseorang mengambil keuntungan dari itu.
User input: pemanfaatan cara di mana input pengguna diproses mungkin cara
termudah untuk menyebabkan kerusakan serius pada data dan aplikasi,
pernyataan yang didukung oleh berbagai laporan serangan diluncurkan pada situs
web berprofil tinggi dengan cara ini. Manipulasi data yang diberikan melalui
bentuk Web, parameter URL, cookies, dan rute mudah diakses lainnya
memungkinkan penyerang untuk menyerang jantung logika aplikasi Anda.
Data dilindungi Dengan buruk: Data adalah nyawa dari perusahaan Anda,
kehilangan itu risiko Anda sendiri. Semua juga sering, database dan account Web
dibiarkan dibuka atau dilindungi dengan password patut dipertanyakan. Atau
akses ke aplikasi administrasi berbasis web tersedia melalui URL mudah
diidentifikasi. Semacam ini gaffes keamanan tidak dapat diterima, terutama
Safe Mode
Jika Anda menjalankan versi PHP yang lebih awal dari PHP 6, safe mode akan
menjadi menarik khususnya jika Anda menjalankan PHP pada lingkungan
bersama-server. Bila diaktifkan, safe mode selalu memverifikasi bahwa pemilik
script yang sedang dijalankan itu cocok dengan pemilik file dimana script
berupaya untuk membuka. Hal ini untuk mencegah pelaksanaan yang tidak
diinginkan, meninjau, dan modifikasi file yang tidak dimiliki oleh user pelaksana,
dengan ketentuan bahwa hak istimewa file juga terkonfigurasi dengan baik untuk
mencegah modifikasi. Mengaktifkan modus safe juga memiliki efek penting
lainnya pada perilaku PHP, selain mengurangi, atau bahkan menonaktifkan,
kemampuan berbagai fungsi standar PHP. Efek ini dan berbagai parameter yang
berhubungan dengan mode safe yang terdiri dari fitur ini akan dibahas dalam
bagian ini.
Perhatian Pada versi 6, safe mode tidak lagi tersedia. Lihat Bab 2 untuk
informasi lebih lanjut.
safe_mode = On | Off
Scope: PHP_INI_SYSTEM; Default value: Off
Mengaktifkan direktif safe_mode menempatkan pembatasan beberapa fitur
bahasa yang berpotensi berbahaya ketika menggunakan PHP dalam lingkungan
bersama. Anda Dapat mengaktifkan safe_mode dengan pengaturan ke nilai
boolean on, atau menonaktifkannya dengan pengaturan untuk Off. Skema
pembatasan yang didasarkan pada membandingkan UID (user ID) dari skrip yang
sedang dijalankan dan UID file bahwa script berupaya untuk mengakses. Jika UID
yang sama, script dapat mengeksekusi, jika tidak, script gagal.
Khususnya, bila safe mode diaktifkan, beberapa pembatasan mulai
berpengaruh:
Penggunaan semua fungsi input / output (misalnya, fopen (), file (), dan require
()) dibatasi untuk file yang memiliki pemilik yang sama dengan script yang
memanggil fungsi tersebut. Sebagai contoh, dengan asumsi bahwa safe mode
diaktifkan, jika skrip yang dimiliki oleh Mary memanggil fopen () dan mencoba
untuk membuka file yang dimiliki oleh John, maka akan gagal. Namun, jika Maria
memiliki kedua script memanggil fopen () dan file yang dipanggil oleh fopen (),
upaya ini akan berhasil.
Mencoba oleh pengguna untuk membuat file baru akan dibatasi untuk
menciptakan file dalam direktori yang dimiliki oleh pengguna.
Mencoba untuk menjalankan script melalui fungsi seperti popen (), system (),
atau exec () hanya memungkinkan bila script berada pada direktori yang
ditentukan oleh direktif konfigurasi safe_mode_exec_dir. Direktif ini dibahas
kemudian dalam bagian ini.
otentikasi HTTP ini diperkuat karena UID dari pemilik skrip otentikasi didahului
ke wilayah otentikasi. Selanjutnya, variabel PHP_AUTH tidak menetapkan kapan
safe mode diaktifkan.
safe_mode_gid = On | Off
Scope: PHP_INI_SYSTEM; Default value: 0ff
Direktif ini mengubah safe mode's perilaku dari memverifikasi UID sebelum
eksekusi untuk memverifikasi ID grup. Misalnya, jika Maria dan Yohanes berada
dalam kelompok pengguna yang sama, script Mary dapat memanggil fopen ()
pada file John.
safe_mode_include_dir = string
Scope: PHP_INI_SYSTEM; Default value: NULL
Anda dapat menggunakan safe_mode_include_dir untuk menunjuk berbagai path
di mana safe mode akan diabaikan jika diaktifkan. Misalnya, Anda mungkin
menggunakan fungsi ini untuk menentukan direktori yang berisi berbagai
template yang mungkin dimasukkan ke dalam beberapa pengguna situs Web.
Anda dapat menetapkan beberapa direktori dengan memisahkan masing-masing
dengan kolon pada sistem berbasis Unix, dan tanda titik koma pada Windows.
Catatan bahwa menetapkan path tertentu tanpa garis miring akan
menyebabkan semua direktori terjatuh di bawah path yang juga diabaikan oleh
pengaturan mode safe. Misalnya, pengaturan direktif ini untuk
/home/configuration berarti bahwa
/home/configuration/templates/ dan
/home/configuration/passwords/ juga dibebaskan dari pembatasan safe mode.
Oleh karena itu, jika Anda ingin mengecualikan hanya sebuah direktori tunggal
atau serangkaian direktori dari pengaturan mode safe, memastikan untuk
menyimpulkan masing-masing dengan garis miring di belakang.
safe_mode_allowed_env_vars = string
Scope: PHP_INI_SYSTEM; Default value: "PHP_"
CHAPTER 24
MVC and the Zend Framework
Bahkan pada tahap awal kemungkinan pengembangan karir Web Anda, kemungkinan Anda
sudah mencoba untuk membuat sketsa fitur dari aplikasi custom jangka panjang yang
diinginkan. Sebuah toko e-commerce mungkin? Sebuah forum komunitas online yang ditujukan
untuk mengumpulkan perangko?