Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk melaksanakan pemeriksaan jenis ketat parameter fungsi dalam PHP?

Bagaimana untuk melaksanakan pemeriksaan jenis ketat parameter fungsi dalam PHP?

WBOY
WBOYasal
2024-04-10 15:54:021102semak imbas

Pemeriksaan ketat jenis parameter fungsi PHP boleh memastikan bahawa parameter yang diluluskan adalah konsisten dengan jenis yang diisytiharkan. Apabila didayakan melalui declare(strict_types=1), parameter fungsi diperlukan untuk memadankan jenis yang ditentukan, jika tidak, pengecualian TypeError akan dilemparkan. Pemeriksaan ketat menyokong jenis asas (int, float), jenis komposit (objek, tatasusunan), jenis kesatuan (int|rentetan) dan jenis pilihan (?int) untuk meningkatkan keteguhan kod dan menghalang parameter jenis yang salah daripada diluluskan.

PHP 函数参数类型严格检查如何实现?

Fahami semakan ketat jenis parameter fungsi PHP

Semakan jenis parameter fungsi PHP merujuk kepada proses menyemak sama ada jenis parameter yang benar-benar diluluskan adalah konsisten dengan jenis parameter yang diisytiharkan oleh fungsi apabila fungsi dipanggil. Kekukuhan kod anda boleh dipertingkatkan dengan pemeriksaan ketat untuk memastikan bahawa parameter yang dihantar kepada fungsi adalah seperti yang diharapkan.

Syntax

Dalam PHP 7.0 dan ke atas, anda boleh menggunakan pernyataan Declare untuk melakukan semakan ketat pada jenis parameter fungsi: Declare 语句对函数参数类型进行严格检查:

declare(strict_types=1);

function add(int $a, int $b) {...}

通过 strict_types=1 声明启用严格模式后,函数 add 要求传入两个整数类型的参数,否则将抛出 TypeError 异常。

参数类型

PHP 支持以下基本类型和复合类型的严格检查:

  • 基本类型:intfloatboolstringnull
  • 复合类型:

    • 对象类型:objectClass
    • 数组类型:array
    • 联合类型:int|string
    • 可选类型:?int

实战案例

场景:

定义一个函数 calculateArea,计算几何图形的面积。需要根据不同的图形类型,传递不同的参数:

function calculateArea($shape, $params) {...}

使用类型检查防止参数错误:

declare(strict_types=1);

function calculateArea(string $shape, array $params): float {...}

通过 strict_types 声明和明确的参数类型,可以防止传递错误类型的参数。例如:

calculateArea(123, []); // 抛出 TypeError 异常

使用联合类型提高灵活性:

function calculateArea(string $shape, int|float $radius): float {...}

联合类型允许函数根据不同的情况接收不同类型的参数。例如,计算圆形或正方形的面积:

calculateArea('circle', 5);
calculateArea('square', 10);

注意要点

  • 严格模式不会影响现有代码,只影响新定义的函数。
  • 只有实际的参数类型与声明的类型不匹配时才抛出异常。
  • 如果希望允许函数返回 null 值,可以使用可选类型 ?rrreee
  • Dayakan mod ketat melalui strict_types=1 pengisytiharan Akhir sekali, fungsi add memerlukan dua parameter jenis integer untuk dihantar, jika tidak, pengecualian TypeError akan dilemparkan.
  • Jenis parameter
🎜PHP menyokong pemeriksaan ketat jenis asas dan jenis komposit berikut: 🎜
    🎜Jenis asas: int, float, bool code>, <code>string, null🎜🎜🎜Jenis komposit: 🎜
      🎜Jenis objek: objek
    atau Kelas 🎜🎜Jenis tatasusunan: susunan🎜🎜Jenis kesatuan: int|string🎜🎜Jenis pilihan: ?int🎜🎜🎜🎜 🎜Kes pertempuran praktikal 🎜🎜Senario:🎜🎜Tentukan fungsi kira Luas untuk mengira luas suatu rajah geometri. Parameter yang berbeza perlu diluluskan mengikut jenis grafik yang berbeza: 🎜rrreee🎜Gunakan semakan jenis untuk mengelakkan ralat parameter: 🎜rrreee🎜Melalui pengisytiharan strict_types dan jenis parameter yang jelas, anda boleh mencegah Melepasi hujah daripada jenis yang salah. Contohnya: 🎜rrreee🎜Gunakan jenis kesatuan untuk meningkatkan fleksibiliti:🎜rrreee🎜Jenis kesatuan membenarkan fungsi menerima jenis parameter yang berbeza berdasarkan situasi yang berbeza. Contohnya, mengira luas bulatan atau segi empat sama: 🎜rrreee🎜Perhatian🎜
      🎜Mod ketat tidak menjejaskan kod sedia ada, hanya fungsi yang baru ditakrifkan. 🎜🎜Pengecualian dilemparkan hanya apabila jenis parameter sebenar tidak sepadan dengan jenis yang diisytiharkan. 🎜🎜Jika anda ingin membenarkan fungsi mengembalikan nilai null, anda boleh menggunakan jenis pilihan ?. 🎜🎜Apabila mod ketat didayakan, jenis mesti dinyatakan secara eksplisit untuk semua parameter fungsi, termasuk parameter pilihan. 🎜🎜

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan pemeriksaan jenis ketat parameter fungsi dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn