目录
为什么返回类型很重要
基本返回类型:从字符串到对象
何时使用void :不返回任何东西的函数
处理具有工会类型的可选或多种类型(PHP 8.0)
常见的陷阱和最佳实践
概括
首页 后端开发 php教程 从'混合到`void':php返回类型声明的实用指南

从'混合到`void':php返回类型声明的实用指南

Jul 27, 2025 am 12:11 AM
PHP Data Types

通过指定函数必须返回的内容,返回PHP中的类型提高了代码的可靠性和清晰度。 2。使用字符串,数组或DateTime等基本类型来执行正确的返回值并尽早捕获错误。 3。应用无效类型? (例如?字符串)何时为有效的返回值。 4.使用void进行执行操作的功能而无需返回数据,仅允许返回;或没有返回声明。 5。php 8.0中的利用联合类型(例如,字符串| int | bool)用于返回多种不同类型的功能。 6.更喜欢明确的返回类型声明,而不是混合的隐式,以增强IDE支持和可维护性。 7.避免过度使用工会类型并混合,保留在任何类型的预期的情况下混合使用。 8.通过将返回类型与其行为对准,例如将false转换为null的null来仔细处理内部PHP功能。 9。不要在空隙函数中返回null以防止混乱,即使在技术上允许。 10。从核心逻辑和API开始,逐步采用返回类型,以使代码更容易预测,更容易发生错误,同时保持可读性和意图。

从混合到`void:php返回类型声明的实用指南

PHP的类型系统自早期以来就已经显着发展,而返回类型声明是编写更可预测和可维护的代码的基石。如果您曾经使用过松散键入的PHP功能(无需任何明确的合同而没有任何明确的合同null ,您可能会遇到难以追踪的错误。这就是返回类型的来源。

从混合到`void:php返回类型声明的实用指南

从PHP 7.0开始,您现在可以指定功能应返回的功能,从而帮助引擎和队友了解您的代码意图。本指南使您无法使用不使用类型( mixed并非总是明确的)来拥抱void ,并提供实践的例子和最佳实践。


为什么返回类型很重要

在研究语法之前,值得了解为什么返回类型会有所帮助:

从混合到`void:php返回类型声明的实用指南
  • 尽早捕获错误:当您期望字符串时返回数组? PHP会抛出TypeError。
  • 提高代码可读性:任何阅读您的功能的人都知道会发生什么。
  • 启用更好的IDE支持:自动完成,重构和直列文档变得更加准确。
  • 鼓励故意设计:您对您的功能应该返回的内容更加努力。

没有返回类型,所有内容都是mixed ,这是任何类型的值。虽然灵活,但这会导致不确定性。返回类型可让您缩小范围。


基本返回类型:从字符串到对象

您可以声明所有常见类型的退货类型:

从混合到`void:php返回类型声明的实用指南
函数getUsername():字符串{
    返回“爱丽丝”;
}

函数getUserData():array {
    返回['name'=>'alice','age'=> 30];
}

函数CreateTateTion():DateTime {
    返回new dateTime();
}

如果您违反合同:

函数getUsername():字符串{
    返回null; //致命错误:返回值必须是类型字符串,null返回
}

除非您允许使用无效类型显式null

 function getUsername():?string {
    返回null; //这现在有效
}

?前缀表示“这种类型或无效”。


何时使用void :不返回任何东西的函数

当功能执行操作时,请使用void ,但不会返回有意义的数据(例如记录,打印或修改状态)。

函数logmessage(字符串$消息):void {
    file_put_contents('log.txt',$message。php_eol,file_append);
    //无需返回语句
}

或带有明确的return;

功能Abortifnotadmin(用户$用户):void {
    如果(!$ user-> isadmin()){
        死(“访问被拒绝”);
    }
    返回; //可选,但允许
}

void的关键规则:

  • 您无法返回值: return 5; →致命错误。
  • return;没有允许的值(与不返回相同)。
  • null也不是有效的返回值。

这实现了这样的想法:“此功能可以做点什么,但没有给您任何回报。”


处理具有工会类型的可选或多种类型(PHP 8.0)

在PHP 8.0之前,您无法表达“返回字符串或布尔”。现在您可以:

函数finduser(int $ id):?user {
    //返回用户或null
}

工会类型更好:

功能processInput($ input):字符串| int | bool {
    如果($ input ===''){
        返回false;
    }
    if(is_numeric($ input)){
        返回(int)$输入;
    }
    返回装饰($输入);
}

这使得返回合同明确而不是将其作为无证件的mixed

?提示:避免过度使用工会类型。如果功能返回太多类型,请考虑是否做得太多。


常见的陷阱和最佳实践

这里有几件事要注意:

  • 不要仅仅为此添加类型
    从关键功能(API,核心逻辑)开始,而不是每个助手。

  • 小心内部PHP功能
    有些人在失败时返回false (例如, strpos() )。匹配期望:

    函数FindPosition(字符串$ Haystack,字符串$针):?int {
        $ pos = strpos($ haystack,$针);
        返回$ pos === false? null:$ pos;
    }

    现在返回类型是?int ,哪个比int|false更清晰。

  • 有意使用mixed (PHP 8.0)
    如果功能真正接受或返回任何类型,请使用mixed

    函数debugprint(混合$ value):void {
        var_dump($ value);
    }

    这总比没有类型的提示好。

  • 避免return null;void函数中
    虽然允许,但它可能会使读者感到困惑。除非您提早退出,否则请return


  • 概括

    从未型(由公约mixed )转移到良好的功能使您的PHP代码更加稳健:

    • 当您知道返回值时,请使用特定类型( stringarrayUser )。
    • 使用?Type null有效响应。
    • 使用void用于仅副作用的功能。
    • 预期多种类型时,请使用联合类型( string|int )。
    • 谨慎和故意使用mixed

    目标不是在最大程度上键入所有内容,而是要使您的代码的行为更清晰,更容易出错。

    基本上:如果您的函数承诺返回类型,请确保它保持这一承诺。 PHP将帮助您执行它。

    以上是从'混合到`void':php返回类型声明的实用指南的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

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

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

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

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

PHP的二元性:导航松散键入与严格类型声明 PHP的二元性:导航松散键入与严格类型声明 Jul 26, 2025 am 09:42 AM

PHP支持松散类型和严格类型并存,这是其从脚本语言演进为现代编程语言的核心特征。1.松散类型适合快速原型开发、处理动态用户输入或对接外部API,但存在类型隐式转换风险、调试困难和工具支持弱的问题。2.严格类型通过declare(strict_types=1)启用,可提前发现错误、提升代码可读性和IDE支持,适用于核心业务逻辑、团队协作和对数据完整性要求高的场景。3.实际开发中应混合使用:默认启用严格类型,仅在必要时在输入边界使用松散类型,并尽早进行验证和类型转换。4.推荐实践包括使用PHPSta

使用PHP 8的工会类型对您的代码库进行现代化现代化 使用PHP 8的工会类型对您的代码库进行现代化现代化 Jul 27, 2025 am 04:33 AM

UpgradePHP7.xcodebasestoPHP8 byreplacingPHPDoc-suggestedtypeslike@paramstring|intwithnativeuniontypessuchasstring|intforparametersandreturntypes,whichimprovestypesafetyandclarity;2.Applyuniontypestomixedinputparameters(e.g.,int|stringforIDs),nullable

精度的危险:处理PHP中的浮点数 精度的危险:处理PHP中的浮点数 Jul 26, 2025 am 09:41 AM

0.1 0.2!==0.3inPHPduetobinaryfloating-pointprecisionlimitations,sodevelopersmustavoiddirectcomparisonsanduseepsilon-basedchecks,employBCMathorGMPforexactarithmetic,storecurrencyinintegerswhenpossible,formatoutputcarefully,andneverrelyonfloatprecision

从'混合到`void':php返回类型声明的实用指南 从'混合到`void':php返回类型声明的实用指南 Jul 27, 2025 am 12:11 AM

returnTypesinphpimProveCoderEliabilitialaryandClarityBysPecifying whatafunctionMustReturn.2.UseBasictyPesLikestring,array,ordatimetoetoEnforCorrectRecturcrectRecturnValuesUnturnvAluesAndCatchErrorSearly.3.applynullabletypespeswith?applynullabletypeswith?

了解``callable''伪型及其实施 了解``callable''伪型及其实施 Jul 27, 2025 am 04:29 AM

AcalableInphpiSapseDo-typerepresentingyanyvaluethatcanbeinvokedusedthuse()operator,pryperally formimallyforflefflexiblecodeiCodeIncallbackSandHigher-rorderfunctions; themainformsofcallablesare:1)命名functionslunctionsLikefunctionsLikeLike'strlen',2)andormousfunctions(2)andonymousfunctions(封闭),3),3),3),3)

PHP 8.1枚举:一种新型类型安全常数的范式 PHP 8.1枚举:一种新型类型安全常数的范式 Jul 28, 2025 am 04:43 AM

PHP8.1引入的Enums提供了类型安全的常量集合,解决了魔法值问题;1.使用enum定义固定常量,如Status::Draft,确保只有预定义值可用;2.通过BackedEnums将枚举绑定到字符串或整数,支持from()和tryFrom()在标量与枚举间转换;3.枚举可定义方法和行为,如color()和isEditable(),增强业务逻辑封装;4.适用于状态、配置等静态场景,不适用于动态数据;5.可实现UnitEnum或BackedEnum接口进行类型约束,提升代码健壮性和IDE支持,是

变量的寿命:PHP的内部' Zval”结构解释了 变量的寿命:PHP的内部' Zval”结构解释了 Jul 27, 2025 am 03:47 AM

PHP使用zval结构管理变量,答案是:1.zval包含值、类型和元数据,大小为16字节;2.类型变化时只需更新联合体和类型信息;3.复杂类型通过指针引用带引用计数的结构;4.赋值时采用写时复制优化内存;5.引用使变量共享同一zval;6.循环引用由专门的垃圾回收器处理。这解释了PHP变量行为的底层机制。

内存管理和PHP数据类型:绩效视角 内存管理和PHP数据类型:绩效视角 Jul 28, 2025 am 04:42 AM

PHP的内存管理基于引用计数和周期回收,不同数据类型对性能和内存消耗有显着影响:1.整数和浮点数内存占用小、操作最快,应优先用于数值运算;2.字符串采用写时复制机制,但大字符串或频繁拼接会引发性能问题,宜用implode优化;3.数组内存开销大,尤其是大型或嵌套数组,应使用生成器处理大数据集并及时释放变量;4.对象传递为引用方式,实例化和属性访问较慢,适用于需要行为封装的场景;5.资源类型需手动释放,否则可能导致系统级泄漏。为提升性能,应合理选择数据类型、及时释放内存、避免全局变量存储大数据,并

See all articles