Pengubahsuaian mekanisme pemprosesan rentetan
1. Rentetan yang mengandungi aksara perenambelasan tidak lagi dianggap sebagai nombor
Rentetan yang mengandungi aksara perenambelasan tidak lagi dianggap sebagai nombor dan tidak lagi akan dilayan secara berbeza. Contohnya, kod berikut:
var_dump("0x123" == "291"); // bool(false) (previously true) var_dump(is_numeric("0x123")); // bool(false) (previously true) var_dump("0xe" + "0x1"); // int(0) (previously 16) var_dump(substr("foo", "0x1")); // string(3) "foo" (previously "oo") // Notice: A non well formed numeric value encounteredboleh menggunakan fungsi filter_var untuk menyemak sama ada rentetan mengandungi aksara perenambelasan atau sama ada ia boleh ditukar kepada integer
$str = "0xffff"; $int = filter_var($str, FILTER_VALIDATE_INT, FILTER_FLAG_ALLOW_HEX); if (false === $int) { throw new Exception("Invalid integer!"); } var_dump($int); // int(65535)
2. Jika u{ mengandungi aksara haram kemudian, ralat akan dilaporkan
Petikan berganda dan sintaks melarikan diri titik kod Unicode telah ditambahkan pada tatabahasa "u{" mesti diikuti oleh aksara UTF-8. Jika ia adalah aksara bukan utf-8, ralat akan dilaporkan:
$str = "\u{xyz}"; // Fatal error: Invalid UTF-8 codepoint escape sequenceboleh mengelakkan ralat ini dengan melarikan diri dari yang pertama.
$str = "\u{xyz}"; // Works fine
Jika tiada { selepas "u", ia tidak memberi kesan:
$str = "\u202e"; // Works fine
PHP IntlChar()
PHP 7 menyokong pengantarabangsaan (i18n) dan penyetempatan (l10n.) melalui sambungan intl. Sambungan ini hanyalah pembungkus asas untuk perpustakaan ICU dan menyediakan kaedah dan ciri yang serupa dengan perpustakaan ICU.
PHP 7 mendedahkan ciri aksara Unikod dalam ICU melalui kelas IntlChar baharu. Kelas ini sendiri mentakrifkan banyak kaedah statik untuk memanipulasi aksara unikod dalam beberapa set aksara.
Contoh
<?php printf('%x', IntlChar::CODEPOINT_MAX); echo IntlChar::charName('@'); var_dump(IntlChar::ispunct('!')); ?>
Hasil output perlaksanaan program di atas ialah:
10ffff COMMERCIAL AT bool(true)