gpt4 book ai didi

php - 为什么在 PHP 中需要类型提示?

转载 作者:IT王子 更新时间:2023-10-29 00:02:04 24 4
gpt4 key购买 nike

我无法理解类型提示在 PHP 中的重要性。

显然 PHP 中的“类型提示”可以定义如下:

"Type hinting" forces you to only pass objects of a particular type. This prevents you from passing incompatible values, and creates a standard if you're working with a team etc.

所以在最基本的级别上进行类型提示,并不是真正使代码工作所必需的?

我有以下代码来尝试理解发生了什么......

索引.php

<?php
include 'Song.php';

$song_object = new Song;

$song_object->title = "Beat it!";
$song_object->lyrics = "It doesn't matter who's wrong or right... just beat it!";


function sing(Song $song)
{
echo "Singing the song called " . $song->title;
echo "<p>" . $song->lyrics . "</p>";
}

sing($song_object);

Song.php

<?php

class Song
{
public $title;
public $lyrics;
}

无论有没有函数 sing() 中的小类型提示,代码都会执行它的操作;

enter image description here

所以,这让我相信类型提示只是一种编码约定,以确保只使用某些类,而不需要生成功能代码,这是正确的吗?

正如上面引述的那样,类型提示是否可以在您与团队合作时创建标准

我是不是漏掉了什么?

最佳答案

类型提示不是必需的,但它可以让您发现某些类型的错误。例如,您可能有一个需要整数的函数或方法。 PHP 将 happily convert “数字查找字符串”转换为整数,这可能导致难以调试行为。如果您在代码中指定您特别需要一个整数,这可以首先防止这些类型的错误。许多程序员认为以这种方式保护他们的代码是一种最佳做法。

作为一个具体的例子,让我们看看你的 index.php 文件的更新版本:

index.php

<?php
include 'Song.php';
include 'Test.php';

$song_object = new Song;
$test_object = new Test;

$song_object->title = "Beat it!";
$song_object->lyrics = "It doesn't matter who's wrong or right... just beat it!";

$test_object->title = "Test it!";
$test_object->lyrics = "It doesn't matter who's wrong or right... just test it!";


function sing(Song $song)
{
echo "Singing the song called " . $song->title;
echo "<p>" . $song->lyrics . "</p>";
}

sing($song_object);
sing($test_object);

以及我添加的新 Test.php 文件:

Test.php

<?php

class Test
{
public $title;
public $lyrics;
}

当我现在运行 index.php 时,我收到以下错误:

输出:

Singing the song called Beat it!<p>It doesn't matter who's wrong or right...
just beat it!</p>PHP Catchable fatal error: Argument 1 passed to sing() must
be an instance of Song, instance of Test given, called in test/index.php on
line 22 and defined in test/index.php on line 15

Catchable fatal error: Argument 1 passed to sing() must be an instance of
Song, instance of Test given, called in test/index.php on line 22 and defined
in test/index.php on line 15

这是 PHP 让我知道我在调用 sing() 函数时尝试使用错误类型的类。

这很有用,因为即使上面的示例有效,Test 类也可能与 Song 类不同。这可能会导致以后难以调试错误。以这种方式使用提示为开发人员提供了一种在类型错误引起问题之前防止它们的方法。这在像 PHP 这样经常渴望在类型之间自动转换的语言中特别有用。

关于php - 为什么在 PHP 中需要类型提示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38308985/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com