Rumah  >  Artikel  >  pembangunan bahagian belakang  >  PHP7 juga menyokong pengisytiharan jenis Mari kita bercakap tentang ciri ini!

PHP7 juga menyokong pengisytiharan jenis Mari kita bercakap tentang ciri ini!

青灯夜游
青灯夜游ke hadapan
2022-05-07 21:22:414635semak imbas

PHP juga telah mula terlibat dalam pengisytiharan jenis PHP7 telah menambah ciri pengisytiharan jenis Artikel berikut akan membawa anda memahami ciri-ciri pengisytiharan jenis PHP dan saya harap ia akan berlaku berguna kepada semua orang!

PHP7 juga menyokong pengisytiharan jenis Mari kita bercakap tentang ciri ini!

Baru-baru ini saya telah mengkaji ciri baharu PHP7 dan mendapati bahawa PHP juga telah mula menggunakan pengisytiharan jenis Faedah berbuat demikian adalah jelas: ia boleh meningkatkan kelajuan berjalan program.

Berikut ialah pengenalan ciri baharu ini:

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

PHP7 telah menambah ciri pengisytiharan jenis Terdapat dua mod untuk pengisytiharan jenis:

  • Mod paksa (mod lalai) Pemahaman saya adalah untuk memaksa penukaran. kepada diperlukan Jenis tidak dibezakan secara ketat tetapi dipaksa untuk ditukar Jika jenis tidak konsisten, tiada ralat akan dilaporkan
  • Mod ketat Sahkan jenis yang tidak konsisten dengan yang diisytiharkan, ralat akan dilaporkan

Format sintaks pengisytiharan jenis skalar:

declare(strict_types=1);

Nilai strict_types:

  • 1 mewakili mod semakan jenis yang ketat, yang digunakan untuk panggilan fungsi dan penyataan kembali;
  • 0 menunjukkan mod semakan jenis lemah
Parameter jenis yang boleh digunakan ialah:

    rentetan
  • int
  • float
  • bool
  • antara muka
  • array
  • boleh dipanggil

mod paksa (mod lalai )

<?php

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

print(sum(1, &#39;2&#39;, 3.1));
?>
Output pelaksanaan program di atas ialah:

6

Analisis: Tukar jenis rentetan '2' kepada jenis integer 2 , tukar jenis apungan 3.1 kepada jenis integer 3 dan kemudian tambahkannya bersama-sama untuk mendapatkan hasil 6.

Mod ketat

<?php

declare(strict_types=1);

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

print(sum(1, &#39;2&#39;, 3.1));
?>
Oleh kerana program di atas menggunakan mod ketat, kerana parameter kedua bukan jenis int, hasil pelaksanaan adalah seperti berikut :

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

Pengisytiharan jenis pemulangan

PHP7 menambah sokongan untuk pengisytiharan jenis pemulangan, jenis pemulangan pengisytiharan Menentukan jenis nilai pulangan fungsi. Jenis pulangan yang boleh diisytiharkan oleh

ialah:

    rentetan
  • int
  • float
  • bool
  • antara muka
  • array
  • boleh dipanggil

Perangkap yang saya pijak

Saya benar-benar berasa buruk di sini Selepas melalui lubang, dalam versi baharu phpstorm, kod gesaan akan muncul mengikut jenis nilai pulangan, membimbing anda untuk menambah pengisytiharan jenis pulangan, jadi saya menambahnya. Tetapi kemudian disebabkan oleh perubahan perniagaan atau pengoptimuman kod, saya hanya mengubah suai nilai pulangan (contohnya, saya mengembalikan tatasusunan sebelum ini, tetapi selepas pengubahsuaian, saya mengembalikan int), tetapi saya terlupa untuk mengubah suai pengisytiharan jenis pulangan (lagipun, saya ada telah digunakan untuk jenis bahasa lemah PHP selama bertahun-tahun... ), ini akan membuang pengecualian dan menyebabkan ralat Ini adalah perangkap yang saya pijak, sila ambil perhatian apabila menggunakannya.

Berfikir

Bahasa GO tidak akan menghadapi masalah yang saya nyatakan di atas, kerana jika jenis nilai pulangan dan pengisytiharan jenis pulangan Jika kompilasi gagal, ralat akan dilaporkan semasa penyusunan.

Sebagai bahasa yang ditaip lemah, PHP telah membuat pengoptimuman seperti pengisytiharan jenis pulangan, tetapi ia tidak memerlukan kami untuk menyusun sebelum bahasa itu dilaksanakan Ia boleh dikeluarkan dan dijalankan secara langsung. jadi ia tidak dapat mencapai bahasa Go "Penggera kompilasi" berlaku, PHP akan membuang pengecualian secara langsung semasa pelaksanaan.

<?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 kembali

<?php
declare(strict_types=1);

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

print(returnIntValue(1));
?>
Memandangkan program di atas menggunakan mod ketat, nilai pulangan mestilah int, tetapi hasil pengiraan adalah terapung, mengakibatkan ralat hasil output pelaksanaan ialah:

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

fungsi void

Nota: Fungsi yang ditakrifkan dengan jenis kekosongan pemulangan tidak boleh mempunyai nilai pulangan, walaupun ia mengembalikan null.

Kaedah yang nilai pulangannya diisytiharkan sebagai jenis batal mesti sama ada meninggalkan pernyataan pulangan sama sekali atau menggunakan pernyataan pulangan kosong.

Contoh

<?php
function exchange(&$left, &$right) : void
{
    if ($left === $right) {
        return;
    }

    $tmp = $left;
    $left = $right;
    $right = $tmp;
}

$a = 1;
$b = 2;
var_dump(exchange($a, $b), $a, $b);
Hasil keluaran contoh di atas:

null int(2) int(1)

Alamat asal : https: //juejin.cn/post/7062942459247984648

Pengarang: Wang Zhongyang Go

Pembelajaran yang disyorkan: "

Tutorial Video PHP"

Atas ialah kandungan terperinci PHP7 juga menyokong pengisytiharan jenis Mari kita bercakap tentang ciri ini!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:juejin.cn. Jika ada pelanggaran, sila hubungi admin@php.cn Padam