目录
PHP 类型提示的重要性是什么?
我可以在 PHP 中对所有数据类型使用类型提示吗?
如果传递的参数的数据类型与类型提示不匹配会发生什么?
PHP 类型提示如何与类继承一起工作?
我可以在 PHP 的内置函数中使用类型提示吗?
PHP 类型提示中的严格模式是什么?
如何在 PHP 中启用严格模式?
PHP 类型提示中弱模式和严格模式的区别是什么?
我可以对函数返回值使用类型提示吗?
PHP 中的可空类型提示是什么?
首页 后端开发 php教程 键入PHP中的暗示

键入PHP中的暗示

Feb 28, 2025 am 08:53 AM

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 作为参数的默认值,它也将被允许。以下是一个示例,这次使用数组:

<?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

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

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

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

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

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1664
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
PHP和Python:比较两种流行的编程语言 PHP和Python:比较两种流行的编程语言 Apr 14, 2025 am 12:13 AM

PHP和Python各有优势,选择依据项目需求。1.PHP适合web开发,尤其快速开发和维护网站。2.Python适用于数据科学、机器学习和人工智能,语法简洁,适合初学者。

说明PHP中的安全密码散列(例如,password_hash,password_verify)。为什么不使用MD5或SHA1? 说明PHP中的安全密码散列(例如,password_hash,password_verify)。为什么不使用MD5或SHA1? Apr 17, 2025 am 12:06 AM

在PHP中,应使用password_hash和password_verify函数实现安全的密码哈希处理,不应使用MD5或SHA1。1)password_hash生成包含盐值的哈希,增强安全性。2)password_verify验证密码,通过比较哈希值确保安全。3)MD5和SHA1易受攻击且缺乏盐值,不适合现代密码安全。

PHP行动:现实世界中的示例和应用程序 PHP行动:现实世界中的示例和应用程序 Apr 14, 2025 am 12:19 AM

PHP在电子商务、内容管理系统和API开发中广泛应用。1)电子商务:用于购物车功能和支付处理。2)内容管理系统:用于动态内容生成和用户管理。3)API开发:用于RESTfulAPI开发和API安全性。通过性能优化和最佳实践,PHP应用的效率和可维护性得以提升。

PHP:网络开发的关键语言 PHP:网络开发的关键语言 Apr 13, 2025 am 12:08 AM

PHP是一种广泛应用于服务器端的脚本语言,特别适合web开发。1.PHP可以嵌入HTML,处理HTTP请求和响应,支持多种数据库。2.PHP用于生成动态网页内容,处理表单数据,访问数据库等,具有强大的社区支持和开源资源。3.PHP是解释型语言,执行过程包括词法分析、语法分析、编译和执行。4.PHP可以与MySQL结合用于用户注册系统等高级应用。5.调试PHP时,可使用error_reporting()和var_dump()等函数。6.优化PHP代码可通过缓存机制、优化数据库查询和使用内置函数。7

PHP的持久相关性:它还活着吗? PHP的持久相关性:它还活着吗? Apr 14, 2025 am 12:12 AM

PHP仍然具有活力,其在现代编程领域中依然占据重要地位。1)PHP的简单易学和强大社区支持使其在Web开发中广泛应用;2)其灵活性和稳定性使其在处理Web表单、数据库操作和文件处理等方面表现出色;3)PHP不断进化和优化,适用于初学者和经验丰富的开发者。

PHP类型提示如何起作用,包括标量类型,返回类型,联合类型和无效类型? PHP类型提示如何起作用,包括标量类型,返回类型,联合类型和无效类型? Apr 17, 2025 am 12:25 AM

PHP类型提示提升代码质量和可读性。1)标量类型提示:自PHP7.0起,允许在函数参数中指定基本数据类型,如int、float等。2)返回类型提示:确保函数返回值类型的一致性。3)联合类型提示:自PHP8.0起,允许在函数参数或返回值中指定多个类型。4)可空类型提示:允许包含null值,处理可能返回空值的函数。

PHP和Python:代码示例和比较 PHP和Python:代码示例和比较 Apr 15, 2025 am 12:07 AM

PHP和Python各有优劣,选择取决于项目需求和个人偏好。1.PHP适合快速开发和维护大型Web应用。2.Python在数据科学和机器学习领域占据主导地位。

PHP与其他语言:比较 PHP与其他语言:比较 Apr 13, 2025 am 12:19 AM

PHP适合web开发,特别是在快速开发和处理动态内容方面表现出色,但不擅长数据科学和企业级应用。与Python相比,PHP在web开发中更具优势,但在数据科学领域不如Python;与Java相比,PHP在企业级应用中表现较差,但在web开发中更灵活;与JavaScript相比,PHP在后端开发中更简洁,但在前端开发中不如JavaScript。

See all articles