键入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
作为参数的默认值,它也将被允许。以下是一个示例,这次使用数组:
<?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中文网其他相关文章!

热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

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

SublimeText3汉化版
中文版,非常好用

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

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

会话劫持可以通过以下步骤实现:1.获取会话ID,2.使用会话ID,3.保持会话活跃。在PHP中防范会话劫持的方法包括:1.使用session_regenerate_id()函数重新生成会话ID,2.通过数据库存储会话数据,3.确保所有会话数据通过HTTPS传输。

PHP8.1中的枚举功能通过定义命名常量增强了代码的清晰度和类型安全性。1)枚举可以是整数、字符串或对象,提高了代码可读性和类型安全性。2)枚举基于类,支持面向对象特性,如遍历和反射。3)枚举可用于比较和赋值,确保类型安全。4)枚举支持添加方法,实现复杂逻辑。5)严格类型检查和错误处理可避免常见错误。6)枚举减少魔法值,提升可维护性,但需注意性能优化。

SOLID原则在PHP开发中的应用包括:1.单一职责原则(SRP):每个类只负责一个功能。2.开闭原则(OCP):通过扩展而非修改实现变化。3.里氏替换原则(LSP):子类可替换基类而不影响程序正确性。4.接口隔离原则(ISP):使用细粒度接口避免依赖不使用的方法。5.依赖倒置原则(DIP):高低层次模块都依赖于抽象,通过依赖注入实现。

在PHPStorm中如何进行CLI模式的调试?在使用PHPStorm进行开发时,有时我们需要在命令行界面(CLI)模式下调试PHP�...

使用PHP的cURL库发送JSON数据在PHP开发中,经常需要与外部API进行交互,其中一种常见的方式是使用cURL库发送POST�...

如何在系统重启后自动设置unixsocket的权限每次系统重启后,我们都需要执行以下命令来修改unixsocket的权限:sudo...
