Ciri baharu dalam PHP7


1. Teras

  • Pernyataan sintaks penggunaan kumpulan. RFC: https://wiki.php.net/rfc/group_use_declarations
  • Menambah pengendali gabungan nol??. RFC: https://wiki.php.net/rfc/isset_ternary
  • 64-bit PHP7 panjang rentetan boleh melebihi 2^31 bait.
  • Tambahan Kaedah Penutupan::call().
  • Rentetan petikan berganda dan heredoc menyokong penggunaan u{xxxxx} untuk mengisytiharkan aksara unikod.
  • define() boleh mentakrifkan tatasusunan sebagai pemalar.
  • Menambahkan operator perbandingan gabungan <=>. RFC: https://wiki.php.net/rfc/combined-comparison-operator
  • Tambah hasil daripada operator. https://wiki.php.net/rfc/generator-delegation
  • kata kunci juga boleh digunakan dalam senario tertentu. RFC: https://wiki.php.net/rfc/context_sensitive_lexer
  • Menambahkan fungsi pengisytiharan jenis skalar. RFC: https://wiki.php.net/rfc/scalar_type_hints_v5
  • Tambahan antara muka untuk menyediakan penjana nombor rawak yang selamat dan mudah untuk lapisan pengguna. RFC: https://wiki.php.net/rfc/easy_userland_csprng


①Pengisytiharan jenis skalar PHP dan jenis nilai pulangan

  • Secara lalai, semua fail PHP berada dalam mod semakan jenis lemah.

    PHP 7 menambahkan ciri pengisytiharan jenis skalar Terdapat dua mod untuk pengisytiharan jenis skalar:

  • mod paksa (lalai) mod ketat

  • sintaks penjelasan format :

    declare(strict_types=1);
  • Nilai strict_types (1 atau 0) dinyatakan dalam kod 1 menunjukkan mod semakan jenis yang ketat, yang digunakan untuk panggilan fungsi dan penyataan pengembalian 0 menunjukkan mod semakan jenis lemah.
  • Parameter jenis yang boleh digunakan ialah:

  • int

  • float

  • bool

  • rentetan

array

boleh dipanggil


contoh Corak mandatori:


<?php
// 强制模式
function sum(int ...$ints)
{
   return array_sum($ints);
}
print(sum(2, '3', 4.1));
?>

Hasil output pelaksanaan program di atas ialah:

9
Contoh ringkasan: Tukar parameter 4.1 kepada integer 4 dan kemudian tambahkannya.

Contoh mod ketat:

<?php
// 严格模式
declare(strict_types=1);

function sum(int ...$ints)
{
   return array_sum($ints);
}

print(sum(2, '3', 4.1));
?>

Memandangkan program di atas menggunakan mod ketat, jika jenis integer yang tidak sesuai muncul dalam parameter, ralat akan dilaporkan Hasil output pelaksanaan ialah:

    PHP Fatal error:  Uncaught TypeError: Argument 2 passed to sum() must be of the type integer, string given, called in……
  • taip balik deklarasi

  • PHP 7 menambah sokongan untuk pengisytiharan jenis pulangan, yang menentukan jenis nilai pulangan fungsi.

  • Jenis pulangan yang boleh diisytiharkan ialah:
  • int
  • float
  • bool
  • string

antara muka array

🎜🎜🎜boleh dipanggil🎜🎜🎜🎜 🎜Contoh pengisytiharan Jenis Pengembalian: 🎜🎜

Dalam contoh, hasil pulangan diperlukan untuk menjadi integer:

<?php
declare(strict_types=1);
function returnIntValue(int $value): int
{
   return $value;
}
print(returnIntValue(5));
?>

Hasil output pelaksanaan program di atas ialah:

5

Contoh ralat pengisytiharan jenis pengembalian:

<?php
declare(strict_types=1);

function returnIntValue(int $value): int
{
   return $value + 1.0;
}

print(returnIntValue(5));
?>

Disebabkan mod ketat, nilai pulangan atur cara di atas mestilah int, tetapi pengiraan Hasilnya ialah apungan, jadi ralat akan dilaporkan Output pelaksanaan ialah:

Fatal error: Uncaught TypeError: Return value of returnIntValue() must be of the type integer, float returned...

②PHP NULL merge operator

7

PHP baharu NULL. operator gabungan (??) digunakan untuk melaksanakan Pintasan isset() untuk mengesan operasi ternary.

Pengendali penggabungan NULL akan menentukan sama ada pembolehubah itu wujud dan nilainya bukan NULL Jika ya, ia akan mengembalikan nilainya sendiri, jika tidak ia akan mengembalikan operan kedua.

Kami pernah menulis pengendali ternary seperti ini:

$site = isset($_GET['site']) ? $_GET['site'] : 'PHP中文网';

Sekarang kita boleh menulisnya terus seperti ini:

$site = $_GET['site'] ?? 'PHP中文网';

Contoh

<?php
// 获取 $_GET['site'] 的值,如果不存在返回 'PHP中文网'
$site = $_GET['site'] ?? 'PHP中文网';

print($site);
print(PHP_EOL); // PHP_EOL 为换行符

// 以上代码等价于
$site = isset($_GET['site']) ? $_GET['site'] : 'PHP中文网';

print($site);
print(PHP_EOL);
// ?? 链
$site = $_GET['site'] ?? $_POST['site'] ?? 'PHP中文网';

print($site);
?>

Hasil keluaran pelaksanaan program di atas ialah:

③Pengendali operasi kapal angkasa PHP (operator perbandingan gabungan) Pengendali kapal angkasa PHP 7 yang baru ditambah (operator perbandingan gabungan) digunakan untuk membandingkan dua ungkapan $a dan $b Jika $a kurang daripada, sama dengan, atau lebih besar daripada $b, ia Mengembalikan -1, 0 atau 1 masing-masing.

example

PHP中文网
PHP中文网
PHP中文网
e

Hasil output pelaksanaan program di atas adalah:

<?php
// 整型比较
print( 1 <=> 1);print(PHP_EOL);
print( 1 <=> 2);print(PHP_EOL);
print( 2 <=> 1);print(PHP_EOL);
print(PHP_EOL); // PHP_EOL 为换行符

// 浮点型比较
print( 1.5 <=> 1.5);print(PHP_EOL);
print( 1.5 <=> 2.5);print(PHP_EOL);
print( 2.5 <=> 1.5);print(PHP_EOL);
print(PHP_EOL);

// 字符串比较
print( "a" <=> "a");print(PHP_EOL);
print( "a" <=> "b");print(PHP_EOL);
print( "b" <=> "a");print(PHP_EOL);
?>

④phpphp arrayly only on dalam php 5.6 arrays tetap boleh ditakrifkan melalui const, PHP 7 boleh Ditakrifkan melalui define(). . Ikat secara dinamik fungsi penutupan kepada contoh objek baharu dan panggil fungsi tersebut.

Contoh

0
-1
1

0
-1
1

0
-1
1
Hasil output perlaksanaan program di atas ialah:
<?php// 使用 define 函数来定义数组define('sites', [
   'Google',
   'PHP',
   'Taobao']);print(sites[1]);?>

⑥PHP CSPRNG

CSPRNG (Penjana Nombor Pseudo-Rawak Secara Kriptografi, penjana nombor rawak pseudo).

PHP 7 menyediakan mekanisme mudah untuk menjana nombor rawak kuat secara kriptografi dengan memperkenalkan beberapa fungsi CSPRNG.

  • random_bytes() - Rentetan pseudo-rawak yang dilindungi secara kriptografi.

  • random_int() - integer pseudo-rawak yang dilindungi secara kriptografi

random_bytes()

Parameter
panjang - rawak Nombor daripada bait yang dikembalikan dalam rentetan.

Nilai pulangan
Mengembalikan rentetan dan menerima parameter input jenis int yang mewakili bilangan bait hasil yang dikembalikan.

Instance

PHP
Hasil output pelaksanaan program di atas ialah:
<?php
class A {
    private $x = 1;
}

// PHP 7 之前版本定义闭包函数代码
$getXCB = function() {
    return $this->x;
};

// 闭包函数绑定到类 A 上
$getX = $getXCB->bindTo(new A, 'A'); 

echo $getX();
print(PHP_EOL);

// PHP 7+ 代码
$getX = function() {
    return $this->x;
};
echo $getX->call(new A);
?>

Format tatabahasa

1
1
parameter

  • min - Nilai minimum yang dikembalikan, mestilah lebih besar daripada atau sama dengan PHP_INT_MIN.
  • maks - nilai maksimum yang dikembalikan, mestilah kurang daripada atau sama dengan PHP_INT_MAX .

Nilai pulangan

  • Mengembalikan nombor int dalam julat yang ditentukan. Instance iating kelas tanpa nama melalui kelas baru, yang boleh digunakan Untuk menggantikan beberapa definisi kelas lengkap yang "terbakar selepas digunakan".

Contoh

string random_bytes ( int $length )
Hasil output perlaksanaan program di atas ialah:
<?php
$bytes = random_bytes(5);
print(bin2hex($bytes));
?>


⑧PHP 7 penyataan penggunaan boleh menggunakan fungsi PHP 7 dari kelas yang sama, import dan ruang yang sama
6f36d48a29
2. Modul Opcache

  • Mekanisme caching opcode sekunder berasaskan fail. Anda boleh menetapkan opcache.file_cache=<DIR> dalam fail php.ini. Apabila perkhidmatan dimulakan semula atau SHM ditetapkan semula, menggunakan mekanisme caching fail sekunder boleh meningkatkan prestasi.
  • Anda juga boleh menetapkan opcache.file_cache_only=1 untuk mengehadkan penggunaan cache fail sahaja.
  • Anda boleh menetapkan parameter opcache.file_cache_consistency_checks=0 untuk mempercepatkan pemuatan.
  • Anda boleh menetapkan opcache.huge_code_pages=0/1 untuk memutuskan sama ada hendak meletakkan halaman kod PHP ke dalam halaman yang besar. http://www.laruence.com/2015/10/02/3069.html
  • Versi windows menambah opcache.file_cache_fallback=1 item konfigurasi.

3. Modul OpenSSL

menambah pilihan "alpn_protocols".

4. Reflection

  • Kelas ReflectionGenerator ditambah untuk hasil daripada Traces, fail/baris semasa, dsb.
  • Menambah kelas ReflectionType untuk menyokong nilai pulangan baharu dan fungsi pengisytiharan skalar dengan lebih baik.

5. Penstriman

Versi windows menambah pilihan untuk membaca blok. Boleh diaktifkan dengan menghantar parameter array("pipe" => array("blocking" => true)).