Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Ciri Petunjuk Jenis dalam PHP7: Bagaimana untuk mengelakkan ralat jenis biasa?

Ciri Petunjuk Jenis dalam PHP7: Bagaimana untuk mengelakkan ralat jenis biasa?

WBOY
WBOYasal
2023-10-20 08:52:59583semak imbas

PHP7中的Type Hinting特性:如何防止常见的类型错误?

Ciri Pembayang Jenis dalam PHP7: Bagaimana untuk mengelakkan ralat jenis biasa?

Ralat jenis adalah salah satu ralat yang paling biasa dalam bahasa pengaturcaraan. PHP7 memperkenalkan ciri Pembayang Jenis, yang membolehkan pembangun menentukan jenis parameter dan jenis nilai pulangan fungsi dalam pengisytiharan fungsi. Ciri Petunjuk Jenis bukan sahaja boleh meningkatkan kebolehbacaan kod, tetapi juga mengurangkan berlakunya ralat jenis. Artikel ini akan memperkenalkan cara menggunakan ciri Petunjuk Jenis dalam PHP7, dan memberikan beberapa contoh ralat jenis biasa dan cara menghalangnya melalui Petunjuk Jenis.

1. Jenis Pembayang jenis parameter
Dalam PHP5 dan versi sebelumnya, pembangun tidak boleh menentukan secara langsung jenis parameter dalam pengisytiharan fungsi. Ini menyebabkan keperluan untuk menyemak jenis parameter secara manual dan mengendalikannya dengan sewajarnya di dalam fungsi Apabila jenis parameter salah, ia boleh membawa kepada keputusan yang salah. Dalam PHP7, anda boleh menggunakan Type Hinting untuk menentukan jenis parameter, dan enjin PHP secara automatik akan menyemak sama ada jenis parameter memenuhi keperluan semasa memanggil fungsi.

  1. Petunjuk Jenis jenis asas
    Untuk jenis asas (seperti rentetan, integer, nombor titik terapung, dll.), anda boleh menggunakan sintaks berikut untuk Petunjuk Jenis:
function greet(string $name) {
    echo "Hello, " . $name;
}

greet("Alice"); // 正确:输出 Hello, Alice
greet(123);    // 错误:参数类型错误,会抛出类型错误(TypeError)异常

Dalam kod di atas, fungsi salam Parameter $name menggunakan Type Hinting jenis string. Apabila kita memanggil fungsi greet yang menghantar rentetan sebagai parameter, tiada ralat akan dihasilkan. Tetapi jika kita lulus dalam integer, pengecualian ralat jenis akan dilemparkan. greet的参数$name使用了string类型的Type Hinting。当我们传入一个字符串作为参数调用greet函数时,不会产生任何错误。但如果我们传入一个整数,就会抛出类型错误异常。

  1. 类型声明的Type Hinting
    除了基本类型,还可以使用自定义类作为参数的Type Hinting。比如,我们有一个User类,可以使用以下方式对函数进行Type Hinting:
class User {
  private $name;

  public function __construct(string $name) {
    $this->name = $name;
  }

  public function getName(): string {
    return $this->name;
  }
}

function welcome(User $user) {
  echo "Welcome, " . $user->getName();
}

$user = new User("John");
welcome($user);  // 正确:输出 Welcome, John
welcome("Alice");  // 错误:参数类型错误,会抛出类型错误(TypeError)异常

在上述代码中,函数welcome的参数$user使用了User类的Type Hinting。我们创建了一个名为John的用户,并将其作为参数传递给welcome函数。这样不会产生任何错误。但是,当我们传入一个字符串Alice时,就会抛出类型错误异常。

二、返回值类型的Type Hinting
除了参数类型的Type Hinting外,PHP7还允许对函数的返回值进行Type Hinting。通过指定函数的返回值类型,可以确保函数返回的结果符合预期,防止潜在的类型错误。

function double(int $num): int {
  return $num * 2;
}

$result = double(5);
echo $result; // 正确:输出10

$result = double("Hello");
echo $result; // 错误:返回值类型错误,会抛出类型错误(TypeError)异常

在上述代码中,函数double的返回值使用了int类型的Type Hinting。当我们传入一个整数作为参数调用double函数时,返回值也是一个整数,不会产生任何错误。但是,当我们传入一个字符串Hello时,返回值类型错误,就会抛出类型错误异常。

三、特殊情况的Type Hinting

  1. NULL Type Hinting
    在PHP7中,可以使用?符号来指定参数或返回值可以为NULL。如果一个参数被标记为?string,则表示它可以是一个字符串,也可以为NULL。
function foo(?string $name): void {
  if ($name !== null) {
    echo "Hello, " . $name;
  } else {
    echo "Hello, Guest";
  }
}

foo(null);    // 正确:输出Hello, Guest
foo("Alice"); // 正确:输出Hello, Alice
  1. Any Type Hinting
    在PHP7中,还可以使用mixed
    1. Petunjuk Jenis bagi pengisytiharan jenis
    Selain jenis asas, anda juga boleh menggunakan Petunjuk Jenis kelas tersuai sebagai parameter. Sebagai contoh, kami mempunyai kelas User dan anda boleh menggunakan kaedah berikut untuk melaksanakan Type Hinting pada fungsi:

    function bar(mixed $value): void {
      echo "The value is " . $value;
    }
    
    bar("Hello");  // 正确:输出The value is Hello
    bar(123);      // 正确:输出The value is 123
    🎜Dalam kod di atas, parameter $user of the function <code>selamat datang Menggunakan Petunjuk Jenis bagi kelas User. Kami mencipta pengguna bernama John dan menghantarnya sebagai parameter kepada fungsi selamat datang. Ini tidak akan menghasilkan sebarang ralat. Walau bagaimanapun, apabila kami menghantar rentetan Alice, pengecualian ralat jenis dilemparkan. 🎜🎜2. Petunjuk Jenis bagi jenis nilai pulangan🎜Selain daripada Petunjuk Jenis bagi jenis parameter, PHP7 juga membenarkan Petunjuk Jenis bagi nilai pemulangan fungsi. Dengan menentukan jenis nilai pulangan fungsi, anda boleh memastikan bahawa hasil yang dikembalikan oleh fungsi adalah seperti yang dijangkakan dan mengelakkan kemungkinan ralat jenis. 🎜rrreee🎜Dalam kod di atas, nilai pulangan bagi fungsi double menggunakan Jenis Pembayang bagi jenis int. Apabila kita memasukkan integer sebagai parameter untuk memanggil fungsi double, nilai pulangan juga adalah integer dan tiada ralat akan dijana. Walau bagaimanapun, apabila kami menghantar rentetan Hello dan jenis nilai pulangan adalah salah, pengecualian ralat jenis akan dilemparkan. . Jika parameter ditandakan sebagai ?string, ini bermakna ia boleh menjadi rentetan atau NULL. 🎜🎜rrreee
      🎜Sebarang Pembayang Jenis🎜Dalam PHP7, anda juga boleh menggunakan kata kunci campur untuk mewakili sebarang jenis parameter atau nilai pulangan. Ini bermakna jenis parameter boleh daripada sebarang jenis dan tiada pemeriksaan jenis dilakukan. 🎜🎜rrreee🎜Type Hinting menyediakan pembangun PHP dengan cara yang ringkas dan berkuasa untuk mengelakkan ralat jenis biasa. Dengan menggunakan ciri Pembayang Jenis dengan betul, kami boleh mengurangkan kejadian ralat jenis dengan mudah dan meningkatkan kebolehpercayaan dan kebolehselenggaraan kod. Walau bagaimanapun, perlu diingatkan bahawa Type Hinting tidak boleh menghapuskan sepenuhnya ralat jenis, dan pengaturcara masih perlu berhati-hati semasa menulis kod dan menjalankan ujian yang mencukupi. 🎜

    Atas ialah kandungan terperinci Ciri Petunjuk Jenis dalam PHP7: Bagaimana untuk mengelakkan ralat jenis biasa?. 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