A. Booleans
Ini adalah jenis yang paling sederhana. Sebuah boolean mengekspresikan nilai kebenaran. Hal ini dapat benar atau salah.
Sintaksis
Untuk menentukan literal boolean, menggunakan konstanta TRUE atau FALSE. Keduanya kasus-sensitif.
<? Php
$ Foo = True; // Menetapkan nilai TRUE untuk $ foo
?>
Biasanya, hasil dari operator yang mengembalikan nilai boolean diteruskan ke struktur kontrol.
<? Php
// == Adalah operator yang menguji
// Kesetaraan dan mengembalikan boolean
if ($ tindakan == "show_version") {
echo "Versi 1.23";
}
// Ini tidak perlu ...
if ($ show_separators == TRUE) {
echo "<hr> \ n";
}
// ... Karena ini dapat digunakan dengan arti yang sama persis:
if ($ show_separators) {
echo "<hr> \ n";
}
?>
Konversi ke boolean
Secara eksplisit mengkonversi nilai untuk boolean, menggunakan (bool) atau (boolean) gips. Namun, dalam banyak kasus pemain tidak perlu, karena nilai akan otomatis dikonversi jika seorang operator, fungsi atau struktur kontrol membutuhkan argumen boolean.
Ketika mengkonversi ke boolean, nilai-nilai berikut dianggap SALAH:
◦ yang boolean SALAH sendiri
◦ integer 0 (nol)
◦ float 0.0 (nol)
◦ string kosong, dan string "0"
◦ array dengan nol elemen
◦ jenis NULL khusus (termasuk variabel unset)
benda ◦ SimpleXML diciptakan dari tag kosong
Setiap nilai lain dianggap BENAR/true (termasuk sumber daya apapun).
PERINGATAN
-1 Dianggap TRUE, seperti non-zero lainnya (apakah negatif atau positif) nomor!
<? Php
var_dump ((bool) ""); // Bool (false)
var_dump ((bool) 1); // Bool (true)
var_dump ((bool) -2); // Bool (true)
var_dump ((bool) "foo"); // Bool (true)
var_dump ((bool) 2.3e5); // Bool (true)
var_dump ((bool) array (12)); // Bool (true)
var_dump ((bool) array ()); // Bool (false)
var_dump ((bool) "false"); // Bool (true)
?>
B. Integer / bilangan bulat
Integer adalah jumlah himpunan ℤ = {..., -2, -1, 0, 1, 2, ...}.
Sintaksis
Bilangan bulat dapat ditentukan dalam desimal (basis 10), heksadesimal (basis 16), oktal (basis 8) atau biner (basis 2) notasi, opsional diawali dengan tanda (- atau +).
integer literal biner yang tersedia sejak PHP 5.4.0.
Untuk menggunakan notasi oktal, mengawali nomor dengan 0 (nol). Untuk menggunakan notasi heksadesimal mendahului nomor dengan 0x. Untuk menggunakan notasi biner mendahului nomor dengan 0b.
Contoh # 1 Integer literal
<? Php
$ A = 1234; // angka desimal
$ A = -123; // Angka negatif
$ A = 0123; // Bilangan oktal (setara dengan 83 desimal)
$ A = 0x1A; // Angka heksadesimal (setara dengan 26 desimal)
$ A = 0b11111111; // Bilangan biner (setara dengan 255 desimal)
?>
Secara formal, struktur untuk literal integer adalah:
desimal: [1-9] [0-9] *
| 0
heksadesimal: 0 [xX] [0-9a-FA-F] +
oktal: 0 [0-7] +
biner: 0b [01] +
integer:? [+ -] desimal
| [+ -]? Heksadesimal
| [+ -]? Oktal
| [+ -] Biner?
Ukuran integer adalah tergantung platform, meskipun nilai maksimum sekitar dua miliar adalah nilai yang biasa (yang 32 bit ditandatangani). platform 64-bit biasanya memiliki nilai maksimum sekitar 9E18, kecuali pada Windows sebelum PHP 7, di mana itu selalu 32 bit. PHP tidak mendukung unsigned integer. Ukuran integer dapat ditentukan dengan menggunakan PHP_INT_SIZE konstan, nilai maksimum menggunakan PHP_INT_MAX konstan sejak PHP 5.0.5, dan nilai minimum menggunakan PHP_INT_MIN konstan sejak PHP 7.0.0.
PERINGATAN
Sebelum PHP 7, jika digit tidak valid diberikan dalam integer oktal (yaitu 8 atau 9), sisa jumlah itu diabaikan. Sejak PHP 7, kesalahan parse dipancarkan.
integer overflow
Jika PHP bertemu sejumlah melampaui batas-batas jenis integer, itu akan ditafsirkan sebagai tipe float sebagai gantinya. Juga, sebuah operasi yang menghasilkan sejumlah melampaui batas-batas dari tipe integer akan kembali jadi float sebagai gantinya.
Contoh # 2 Integer overflow pada sistem 32-bit
<? Php
$ LARGE_NUMBER = 2147483647;
var_dump ($ LARGE_NUMBER); // Int (2147483647)
$ LARGE_NUMBER = 2147483648;
var_dump ($ LARGE_NUMBER); // float (2147483648)
$ Juta = 1000000;
$ LARGE_NUMBER = 50000 * $ juta;
var_dump ($ LARGE_NUMBER); // float (50000000000)
?>
Contoh # 3 Integer overflow pada sistem 64-bit
<? Php
$ LARGE_NUMBER = 9223372036854775807;
var_dump ($ LARGE_NUMBER); // Int (9223372036854775807)
$ LARGE_NUMBER = 9223372036854775808;
var_dump ($ LARGE_NUMBER); // float (9.2233720368548E + 18)
$ Juta = 1000000;
$ LARGE_NUMBER = 50000000000000 * $ juta;
var_dump ($ LARGE_NUMBER); // float (5.0E + 19)
?>
Tidak ada operator pembagian integer di PHP. 1/2 menghasilkan float 0,5. nilai tersebut dapat dicor ke integer untuk melengkapi itu menuju nol, atau putaran () fungsi memberikan kontrol yang lebih baik atas pembulatan.
<? Php
var_dump (25/7); // float (3,5714285714286)
var_dump ((int) (25/7)); // Int (3)
var_dump (round (25/7)); // float (4)
?>
Konversi ke integer
Secara eksplisit mengkonversi nilai ke integer, menggunakan baik (int) atau (integer) gips. Namun, dalam banyak kasus pemain tidak diperlukan, karena nilai akan otomatis dikonversi jika seorang operator, fungsi atau struktur kontrol membutuhkan argumen integer. Nilai juga dapat dikonversi ke integer dengan intval () fungsi.
Jika sumber daya dikonversi ke integer, maka hasilnya akan menjadi nomor sumber daya unik yang diberikan untuk sumber daya dengan PHP saat runtime.
dari boolean
SALAH(false) akan menghasilkan 0 (nol), dan BENAR(true) akan menghasilkan 1 (satu).
Dari angka floating point
Ketika mengkonversi dari float ke integer, nomor tersebut akan dibulatkan ke nol.
Jika float adalah di luar batas-batas bilangan bulat (biasanya +/- 2.15e + 9 = 2 ^ 31 pada platform 32-bit dan +/- 9.22e + 18 = 2 ^ 63 pada platform 64-bit selain Windows), hasilnya tidak terdefinisi, karena mengambang tidak memiliki cukup presisi untuk memberikan hasil bilangan bulat yang tepat. Tidak ada peringatan, bahkan tidak pemberitahuan akan dikeluarkan jika hal ini terjadi!
catatan:
Pada PHP 7.0.0, bukannya tidak terdefinisi dan tergantung platform, NaN dan Infinity akan selalu menjadi nol ketika dilemparkan ke integer.
PERINGATAN
Tidak pernah melemparkan sebuah fraksi yang tidak diketahui ke integer, karena hal ini kadang-kadang dapat menyebabkan hasil yang tidak diharapkan.
<? Php
echo (int) ((0,1 + 0,7) * 10); // dicetak 7!
?>
Dari jenis lain
Peringatan
Perilaku mengkonversi ke integer tidak terdefinisi untuk jenis lainnya. Jangan bergantung pada setiap perilaku yang diamati, karena dapat berubah tanpa pemberitahuan.
C.Angka floating point
Angka floating point (juga dikenal sebagai "mengapung", "ganda", atau "bilangan real") dapat ditentukan dengan menggunakan salah satu sintaks berikut:
<? Php
$ A = 1,234;
$ B = 1.2e3;
$ C = 7E-10;
?>
Secara formal:
LNUM [0-9] +
DNUM ([0-9] * [\.] {LNUM}) | ({} LNUM [\.] [0-9] *)
EXPONENT_DNUM [+ -]? (({LNUM} |? {DNUM}) [eE] [+ -] {LNUM})
Ukuran float adalah tergantung platform, walaupun maksimum ~ 1.8e308 dengan presisi sekitar 14 digit desimal adalah nilai umum (64 bit format yang IEEE).
PERINGATAN
Floating point presisi
nomor floating point telah presisi terbatas. Meskipun tergantung pada sistem, PHP biasanya menggunakan IEEE 754 Format presisi ganda, yang akan memberikan kesalahan relatif maksimum karena pembulatan di urutan 1.11e-16. operasi aritmatika non SD dapat memberikan kesalahan yang lebih besar, dan, tentu saja, kesalahan propagasi harus dipertimbangkan ketika beberapa operasi diperparah.
Selain itu, bilangan rasional yang persis representable sebagai angka floating point dalam basis 10, seperti 0,1 atau 0,7, tidak memiliki representasi yang tepat sebagai angka floating point dalam basis 2, yang digunakan secara internal, tidak peduli ukuran mantissa. Oleh karena itu, mereka tidak dapat dikonversi menjadi rekan biner internal mereka tanpa kerugian kecil presisi. Hal ini dapat menyebabkan hasil yang membingungkan: misalnya, lantai ((0,1 + 0,7) * 10) biasanya akan kembali 7 bukannya diharapkan 8, karena representasi internal akan menjadi sesuatu seperti 7,9999999999999991118 ....
Jadi tidak pernah percaya float hasil angka ke angka terakhir, dan tidak membandingkan angka floating point langsung untuk kesetaraan. Jika presisi tinggi diperlukan, fungsi presisi matematika sewenang-wenang dan fungsi gmp tersedia.
Mengkonversi float
Untuk informasi tentang mengkonversi string mengapung, melihat konversi String ke nomor. Untuk nilai jenis lain, konversi dilakukan dengan mengkonversi nilai ke integer pertama dan kemudian float. Pada PHP 5, pemberitahuan dilemparkan jika sebuah objek diubah untuk mengapung.
membandingkan float
Seperti yang tercantum dalam peringatan di atas, pengujian nilai floating point untuk kesetaraan yang bermasalah, karena cara bahwa mereka diwakili secara internal. Namun, ada cara untuk membuat perbandingan dari nilai floating point yang bekerja di sekitar keterbatasan ini.
Untuk menguji nilai floating point untuk kesetaraan, batas atas kesalahan relatif karena pembulatan digunakan. Nilai ini dikenal sebagai epsilon mesin, atau unit pembulatan, dan perbedaan diterima terkecil dalam perhitungan.
$ A dan $ b adalah sama dengan 5 digit presisi.
<? Php
$ A = 1.23456789;
$ B = 1.23456780;
$ Epsilon = 0,00001;
jika (abs ($ a- $ b) <$ epsilon) {
echo "benar";
}
?>
NaN
Beberapa operasi numerik dapat menghasilkan nilai diwakili oleh NAN konstan. Hasil ini merupakan nilai terdefinisi atau Unrepresentable dalam perhitungan floating-point. Setiap perbandingan longgar atau ketat nilai ini terhadap nilai lain, termasuk dirinya, akan memiliki hasil SALAH (false).
Karena NAN mewakili sejumlah nilai yang berbeda, NAN tidak harus dibandingkan dengan nilai-nilai lain, termasuk dirinya sendiri, dan bukannya harus diperiksa untuk menggunakan is_nan ().
Tidak ada komentar:
Posting Komentar
Catatan: Hanya anggota dari blog ini yang dapat mengirim komentar.