搜索
首页后端开发php教程键入PHP中的暗示

Type Hinting in PHP

关键要点

  • PHP 的类型提示允许开发者在函数声明中指定参数的预期数据类型,从而增强代码的健壮性和可读性。但是,PHP 的类型提示不支持标量数据类型,例如字符串或整数。
  • PHP 是一种弱类型语言,这意味着它不要求你声明数据类型。在 PHP 5.4 中添加标量 PHP 类型提示一直存在争议,反对者认为这违背了 PHP 的基本设计。尽管最初得到支持,但由于社区的回应,此功能并未进入 PHP 5.4 版本。
  • 尽管 PHP 的类型提示有限制,但当参数不是标量类型时,你可以执行基本验证来达到此目的。在这种情况下,可以使用 is_string()is_int() 等函数来引发错误或抛出异常。

从 PHP 5 开始,你可以使用类型提示来指定函数声明中参数的预期数据类型。调用函数时,PHP 将检查参数是否为指定的类型。如果不是,运行时将引发错误并停止执行。有效的类型包括接收对象的类名和接收数组的 array。以下是一个示例:

<?php
function enroll(Student $student, School $school) {
    echo "Enrolling " . $student->name . " in " . $school->name;
}
?>

通过告诉 PHP enroll() 方法期望接收什么类型的对象,你可以确保学生被注册到学校而不是修道院或 401K 计划中。同样,你知道不会有任何顽固的厚皮动物出现在三年级的第一天。如果我试图将自己注册到医疗保险会发生什么?

<?php
$me = new Student("Amanda");
$medicare = new Program("Medicare");
$enroll = enroll($me, $medicare);
?>

虽然我是一名学生,但会发生以下错误:

<code>Catchable fatal error: Argument 2 passed to enroll() must be an instance of School, instance of Program given, called in typehint.php on line 32 and defined in typehint.php on line 6</code>

如果使用 <cod>null</cod> 作为参数的默认值,它也将被允许。以下是一个示例,这次使用数组:

<?php
function startParty(array $guests, array $food = null) {
    // party stuff...
}
$guests = array("Susan Foreman", "Sarah Jane Smith", "Rose Tyler", "Donna Noble");
startParty($guests, null);
?>

只要有客人,无论有没有食物,都会有派对。

类型提示的局限性

任何已定义的类都可以是有效的类型提示,尽管 PHP 不支持泛型对象的类型提示。其他情况呢?这是一个关于 PHP 类型提示局限性的特殊示例:

<?php
function stringTest(string $string) {
    echo $string;
}
stringTest("definitely a string");
?>
<code>Catchable fatal error: Argument 1 passed to stringTest() must be an instance of string, string given, called in typehint.php on line 42 and defined in typehint.php on line 39</code>

你不是第一个想到“这是什么疯狂?我给了你一个字符串实例,你却抱怨它必须是一个字符串实例!”没关系。这是常有的事。事实上,乍一看,这可能是一个相当令人困惑的错误消息。stringTest() 并不是在寻找字符串,而是在寻找字符串类的实例。PHP 的类型提示不支持标量数据类型,例如字符串或整数值。但是没关系!如果你需要在参数不是标量类型(例如字符串或整数)时引发错误或抛出异常,可以使用 is_string()is_int() 等函数执行基本验证来达到此目的。

标量战争

关于在 PHP 5.4 中添加标量 PHP 类型提示,存在一些争议。反对更改的人认为,这种支持会违背 PHP 的基本设计。PHP 被认为是一种弱类型语言。本质上,这意味着 PHP 不要求你声明数据类型。变量仍然与它们关联的数据类型相关联,但你可以做一些激进的事情,例如将字符串添加到整数而不会导致错误。2010 年 5 月,对标量类型提示的支持被添加到 PHP 主干中。但由于社区的回应,此功能不会进入 5.4 版本。

总结

类型提示是引入 PHP 用于面向对象编程的技术(特别是用于识别捕获异常的类型)。我鼓励你阅读更多关于在此处使用对象的信息。图片来自 Carlos E. Santa Maria / Shutterstock

PHP 类型提示常见问题解答 (FAQ)

PHP 类型提示的重要性是什么?

PHP 中的类型提示是一个重要特性,允许开发者在函数声明中指定参数的预期数据类型。它通过确保函数接收正确类型的数值来增强代码的健壮性。这导致代码中的错误和漏洞更少,使其更可靠且更容易调试。它还提高了代码的可读性,使其他开发者更容易理解代码的功能。

我可以在 PHP 中对所有数据类型使用类型提示吗?

PHP 支持对多种数据类型进行类型提示,包括对象、数组、接口、可调用和可迭代。但是,需要注意的是,PHP 直到 7.0 版本才支持标量类型提示(int、float、string 和 bool)。从 PHP 7.0 开始,你可以对所有数据类型使用类型提示。

如果传递的参数的数据类型与类型提示不匹配会发生什么?

如果传递的参数的数据类型与函数声明中的类型提示不匹配,PHP 将抛出“致命错误”。此错误将停止脚本的执行,防止任何进一步的处理。这就是为什么必须确保将正确的数据类型传递给函数的原因。

PHP 类型提示如何与类继承一起工作?

在 PHP 中,类型提示可以与类继承一起使用。如果函数期望某个特定类类型的参数,它也将接受该类的子类的实例。这是因为子类是其父类的特定类型,因此满足类型提示。

我可以在 PHP 的内置函数中使用类型提示吗?

不可以,PHP 中的类型提示只能用于用户定义的函数。PHP 的内置函数不支持类型提示。但是,这些函数通常具有处理不同数据类型的内部机制。

PHP 类型提示中的严格模式是什么?

PHP 类型提示中的严格模式是 PHP 7.0 中引入的一个特性。启用严格模式后,PHP 将根据类型提示强制执行数据类型的精确匹配。如果传递的参数的数据类型与类型提示不完全匹配,即使该参数可以强制转换为正确的类型,PHP 也会抛出“致命错误”。

如何在 PHP 中启用严格模式?

要在 PHP 中启用严格模式,你需要在 PHP 文件的顶部声明 declare(strict_types=1);。此声明必须是脚本中的第一个语句。

PHP 类型提示中弱模式和严格模式的区别是什么?

PHP 类型提示中弱模式和严格模式的区别在于 PHP 如何处理类型不匹配。在弱模式下,如果可能,PHP 将尝试将传递的参数强制转换为正确的数据类型。相反,在严格模式下,PHP 将不会尝试强制转换值,如果数据类型不完全匹配,则会抛出“致命错误”。

我可以对函数返回值使用类型提示吗?

是的,从 PHP 7.0 开始,你可以对函数返回值使用类型提示。此特性允许你指定函数返回值的预期数据类型,从而增强代码的可靠性和可读性。

PHP 中的可空类型提示是什么?

可空类型提示是 PHP 7.1 中引入的一个特性。它允许你指定函数参数或返回值可以是指定类型或 null。要使类型提示可为空,请在类型名称前加上问号 (?)。例如,“?string”表示该值可以是字符串或 null。

以上是键入PHP中的暗示的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
在Laravel中使用Flash会话数据在Laravel中使用Flash会话数据Mar 12, 2025 pm 05:08 PM

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

构建具有Laravel后端的React应用程序:第2部分,React构建具有Laravel后端的React应用程序:第2部分,ReactMar 04, 2025 am 09:33 AM

这是有关用Laravel后端构建React应用程序的系列的第二个也是最后一部分。在该系列的第一部分中,我们使用Laravel为基本的产品上市应用程序创建了一个RESTFUL API。在本教程中,我们将成为开发人员

简化的HTTP响应在Laravel测试中模拟了简化的HTTP响应在Laravel测试中模拟了Mar 12, 2025 pm 05:09 PM

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

php中的卷曲:如何在REST API中使用PHP卷曲扩展php中的卷曲:如何在REST API中使用PHP卷曲扩展Mar 14, 2025 am 11:42 AM

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

在Codecanyon上的12个最佳PHP聊天脚本在Codecanyon上的12个最佳PHP聊天脚本Mar 13, 2025 pm 12:08 PM

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

Laravel中的通知Laravel中的通知Mar 04, 2025 am 09:22 AM

在本文中,我们将在Laravel Web框架中探索通知系统。 Laravel中的通知系统使您可以通过不同渠道向用户发送通知。今天,我们将讨论您如何发送通知OV

解释PHP中晚期静态结合的概念。解释PHP中晚期静态结合的概念。Mar 21, 2025 pm 01:33 PM

文章讨论了PHP 5.3中引入的PHP中的晚期静态结合(LSB),从而允许静态方法的运行时分辨率调用以获得更灵活的继承。 LSB的实用应用和潜在的触摸

PHP记录:PHP日志分析的最佳实践PHP记录:PHP日志分析的最佳实践Mar 10, 2025 pm 02:32 PM

PHP日志记录对于监视和调试Web应用程序以及捕获关键事件,错误和运行时行为至关重要。它为系统性能提供了宝贵的见解,有助于识别问题并支持更快的故障排除

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
1 个月前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。