关键要点
- 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中文网其他相关文章!

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

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

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

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

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

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

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

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


热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

禅工作室 13.0.1
功能强大的PHP集成开发环境

记事本++7.3.1
好用且免费的代码编辑器

Atom编辑器mac版下载
最流行的的开源编辑器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

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