Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
PHP 属性:如何使用 PHP 属性并创建自定义属性类 – 快速提示_创想鸟

PHP 属性:如何使用 PHP 属性并创建自定义属性类 – 快速提示

php 属性是在 php 8.0 中引入的。该版本标志着该语言的一个重要里程碑,带来了一些新功能和改进,包括引入用于向代码声明添加元数据的属性。

我第一次必须处理属性是由于 inspector 的 php 库中的一个问题。检查 github。在深入研究解决方案之前,让我们先概述一下属性是什么以及如何在 php 代码中使用它们。

属性是一项强大的功能,允许您将元数据添加到类、方法或属性等声明中。这些元数据可以通过编程方式检索,为更干净、更有组织、更高效的代码开辟了新的可能性。

记住,属性在运行时没有效果。它们将在反射 api 中可用,使您的应用程序能够根据附加到类、方法或属性的属性了解您想要运行的内容。

内置属性

php 附带了几个用于不同目的的内置属性。以下是一些值得注意的:

立即学习“PHP免费学习笔记(深入)”;

@已弃用

将函数或方法标记为已弃用,表明应避免使用它,因为它可能会在未来版本中被删除。

#[deprecated("use newfunction() instead")]function oldfunction() {    // function implementation}

@覆盖

确保子类中的方法旨在覆盖父类中的方法。

class child extends parent {    #[override]    public function defaultmethod()     {        // method implementation    }}

如果 defaultmethod() 最终将在父类中更改其名称,则这不再是重写。在这种情况下,php 将发出警告,因为我们明确声明我们希望进行覆盖并提醒我们有关未对齐的情况。

不管怎样,一个好的ide应该能让我们不犯这样的错误。

@suppresswarnings

抑制特定代码段的特定警告。

#[suppresswarnings("somewarning")]function somefunction() {    // function implementation}

创建自定义属性类

现在,让我们创建一个自定义属性类。当您想要将特定行为封装在属性中时,这非常有用。

#[attribute]class customattribute {    public string $message;    public function __construct(string $message)     {        $this->message = $message;    }}

然后您可以在各种元素上使用此自定义属性:

class myclass {    #[customattribute("this is a custom attribute")]    public $myproperty;    #[customattribute("another custom attribute")]    public function mymethod()     {        // method implementation    }}

使用示例

让我们探讨一个实际的例子。假设您正在构建一个 web 应用程序,并且您想要创建一个自定义属性来定义字符串的长度:

#[attribute(attribute::target_property)]class maxlength {    public int $maxlength;    public function __construct(int $maxlength)     {        $this->maxlength = $maxlength;    }}

在上面的示例中,我们限制了仅将属性应用于类属性的能力。现在我们可以在 user 类中使用它:

class user {    #[maxlength(20, message: "username must be 20 characters or less")]    public string $username;    // other properties and methods}

前面提到,向属性添加属性在执行过程中没有任何影响。但我们现在可以使用反射检索这些信息,最终采取一些行动。

php 框架的采用

最常用的 php 框架(如 symfony 和 laravel)已经采用属性来基本上取代“注释”。在 symfony 5.2 或更高版本中,您可以声明一个控制器并使用属性将其连接到路由:

public class arrayable implements arrayaccess{    …    public function offsetexists($offset)    {        return isset($this->data[$offset]);    }    …}

自 php 8 起,arrayaccess 接口的定义更改为:

PHP 属性:如何使用 PHP 属性并创建自定义属性类 – 快速提示

通过使用属性,他们强制声明偏移函数中参数的数据类型。使用 languageleveltypeaware 属性,如果实现不提供参数的数据类型,则会触发“弃用警告”。

但是在函数参数中声明数据类型会破坏与不支持参数数据类型声明的旧版本 php 的兼容性。

由于这只是对未来更改的警告,我们使用另一个内置 php 属性来解决该问题以抑制警告:

public class Arrayable implements ArrayAccess{    …    #[ReturnTypeWillChange]    public function offsetExists($offset)    {        return isset($this->data[$offset]);    }    …}

returntypewillchange 属性只是告诉 php,我们了解该语言的未来变化,并且我们已经计划了必要的更新。

特别是对于这一更改,它们肯定会在 php 9 中实现。

请记住明智地使用属性,保持代码库干净且有详细记录。这在 saas 产品开发中尤其重要,因为可扩展性、可维护性和效率至关重要。

督察新人?免费监控您的应用程序

inspector 是一款专为软件开发人员设计的代码执行监控工具。您不需要在服务器级别安装任何东西,只需安装 composer 就可以开始了。

与其他复杂的一体化平台不同,inspector 超级简单,并且对 php 友好。您可以尝试我们的 laravel 或 symfony 包。

如果您正在寻找有效的自动化、深入的见解以及将警报和通知转发到消息传递环境的能力,请免费尝试 inspector。注册您的帐户。

或在网站上了解更多:https://inspector.dev

PHP 属性:如何使用 PHP 属性并创建自定义属性类 – 快速提示

以上就是PHP 属性:如何使用 PHP 属性并创建自定义属性类 – 快速提示的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1245419.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
托管平台列表:综合指南
上一篇 2025年12月9日 17:43:25
PHP 函数如何与 C/C++ 交互?
下一篇 2025年12月9日 17:43:33

相关推荐

  • PHP错误日志怎么查看_PHP错误日志定位与查看方法

    要查看PHP错误日志,首先确定php.ini中error_log路径,若未设置则检查Web服务器(如Apache/Nginx)错误日志;确保log_errors=On、error_reporting合理配置,并通过tail、grep等工具分析日志,结合框架日志和系统日志(如syslog)全面定位问题…

    2026年9月21日
    200
  • VSCode中怎么使用REM_VSCode移动端REM布局编写与换算教程

    答案:REM_VSCode插件可自动将像素转换为REM,需配置rootFontSize和precision,支持自动与手动转换,确保与html的font-size一致,配合media query适配不同屏幕,若插件异常可检查配置、重启或重装,替代工具有postcss-pxtorem、在线转换工具及浏…

    2026年9月21日
    100
  • Laravel中的Blade模板引擎基础用法

    blade模板引擎在laravel中用于简化视图开发。具体使用方法如下:1.输出变量:{{ $variable }}。2.条件判断:@if、@else、@elseif。3.循环:@foreach。4.模板继承:@extends、@section、@yield。blade让视图代码更简洁易读,但需注意…

    2026年9月21日
    200
  • Linux查看系统日志的常用命令

    答案是查看Linux日志需综合使用journalctl、dmesg、tail、grep等工具。journalctl用于systemd系统集中查询服务及内核日志,支持时间、优先级、字段等多维度过滤;dmesg专注内核启动与硬件问题;tail -f实时监控日志动态;cat、grep、less结合正则和管…

    用户投稿 2026年9月21日
    000
  • Workerman服务启动失败的排查步骤

    workerman服务启动失败的排查步骤如下:1. 检查配置文件,确保无语法错误;2. 查看系统日志,寻找错误线索;3. 检查端口占用情况,确保端口未被占用;4. 调整文件权限,确保workerman有足够权限;5. 检查php环境,确保版本兼容且扩展已安装。 关于Workerman服务启动失败的排…

    2026年9月21日
    200
  • 数据库运维开发环境的调试模式演进

    数据库运维开发环境的调试模式演进数据库运维开发环境的调试模式演进数据库运维开发环境的调试模式演进数据库运维开发环境的调试模式演进

    这是学习笔记的第2393篇文章。 昨日,同事反馈了一个问题,原本的办公机环境中的虚拟机可以将办公机的IP暴露出来,提供数据库运维的API服务。例如,办公机的IP为192.168.10.100,而使用VirtualBox的虚拟机采用主机模式,其IP可能为192.168.56.100,那么192.168…

    2026年9月21日 用户投稿
    100
  • VSCode编写Java代码方法_VSCode搭建Java开发环境实战教程

    答案:在VSCode中配置Java开发环境需安装JDK并设置环境变量,再安装VSCode及Java扩展包,即可实现Java项目的创建、编写、运行与调试。它轻量、启动快,支持多语言和丰富扩展,集成Maven/Gradle,适合日常开发。 在VSCode里编写Java代码,说白了,就是把这个轻量级的代码…

    2026年9月21日
    100
  • 使用Laravel构建RESTful API:实现现代化的后端开发

    使用Laravel构建RESTful API:实现现代化的后端开发 引言:在现代的Web开发中,构建RESTful API已经成为了一种主流的方式。RESTful API提供了一种灵活、可扩展的方式,用于与前端应用、移动应用或其他第三方服务进行交互。 Laravel是一款优秀的PHP框架,不仅提供了…

    2026年9月21日
    000
  • Linux interfaces 虚拟网络类型了解01

    Linux interfaces 虚拟网络类型了解01Linux interfaces 虚拟网络类型了解01Linux interfaces 虚拟网络类型了解01Linux interfaces 虚拟网络类型了解01

    在osi模型的定义中,数据链路层和物理层,以及传输层和网络层执行的任务在概念上相似:它们都提供了数据传输的方式,即沿着特定路径将数据从源点传输到目的地的方法。然而,数据链路层和物理层负责跨物理路径的通信服务,而传输层和网络层则提供由多个数据链路组成的逻辑路径或虚拟路径的通信服务。 Bridge操作指…

    2026年9月21日 用户投稿
    100
  • PHP简易路由框架构建:从URL解析到动态控制器加载的实践指南

    本文旨在指导读者构建一个基础的PHP路由系统,实现URL路径到控制器方法的高效映射。内容涵盖URL解析、控制器动态加载、方法调用以及关键的错误处理机制,特别强调如何避免常见的“未定义变量”错误和文件包含路径问题,确保路由系统稳定且易于维护。 一、路由系统核心原理 构建一个简单的php路由系统,其核心…

    2026年9月21日
    200
  • Laravel中的表单构建和验证:简化用户输入和数据处理

    Laravel中的表单构建和验证:简化用户输入和数据处理 在Web应用程序开发中,表单是用户与应用程序进行交互的重要方式之一。Laravel作为一种流行的PHP框架,提供了许多便捷的工具和功能来简化表单的构建和验证过程。本文将介绍如何使用Laravel来简化用户输入和数据处理过程。 一、表单构建 L…

    2026年9月21日
    000
  • VSCode侧边栏怎么去掉_VSCode侧边栏隐藏教程

    隐藏VSCode侧边栏可通过Ctrl + B(Windows/Linux)或Cmd + B(macOS)快捷键快速切换,也可通过菜单栏“视图 > 外观 > 切换侧边栏可见性”或命令面板执行“View: Toggle Sidebar Visibility”实现。推荐使用快捷键操作,效率最高…

    2026年9月21日
    100
  • MobileCLIP2— 苹果开源的端侧多模态模型

    MobileCLIP2— 苹果开源的端侧多模态模型MobileCLIP2— 苹果开源的端侧多模态模型MobileCLIP2— 苹果开源的端侧多模态模型MobileCLIP2— 苹果开源的端侧多模态模型

    ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 可图大模型 可图大模型(Kolors)是快手大模型团队自研打造的文生图AI大模型 32 查看详情 MobileCLIP2是什么 mobileclip2是由苹果研究团队开发的新一代高效多模态模型,…

    2026年9月21日 用户投稿
    300
  • MySQL用户权限体系配置思路_Sublime中编辑多用户分权管理脚本

    MySQL用户权限体系配置思路_Sublime中编辑多用户分权管理脚本MySQL用户权限体系配置思路_Sublime中编辑多用户分权管理脚本MySQL用户权限体系配置思路_Sublime中编辑多用户分权管理脚本MySQL用户权限体系配置思路_Sublime中编辑多用户分权管理脚本

    最小权限原则是mysql用户权限配置的核心,确保每个用户仅拥有必要权限以提升安全性与可维护性。1.明确需求:根据用户角色分配如只读、增删改查或结构修改权限;2.创建用户并编写sql脚本进行权限管理,替代手动输入命令,提高效率与一致性;3.使用sublime text等编辑器提升脚本编写效率,利用语法…

    2026年9月21日 用户投稿
    100
  • 如何备份VSCode的全部设置和扩展?

    备份VSCode全部设置和扩展需保存配置文件与扩展目录;2. 配置文件位于各系统指定路径的User文件夹内,包含settings.json和keybindings.json;3. 通过code –list-extensions导出扩展列表并用xargs批量重装可恢复扩展;4. 推荐直接复…

    2026年9月21日
    100
  • Laravel应用的安全审计(Security Audit)方法

    进行安全审计对laravel应用至关重要,因为它能发现并修复安全漏洞,提升整体安全性和用户信任度。具体方法包括:1. 代码审查,确保无未过滤输入和弱密码;2. 配置文件安全性,保护敏感信息;3. 依赖管理,更新第三方包;4. 用户认证和授权,防止未授权访问;5. 日志和监控,检测异常行为。 在讨论L…

    2026年9月21日
    200
  • Laravel 8 登录后重定向到仪表盘的全面指南

    本文深入探讨了 Laravel 8 中用户登录后重定向到仪表盘的多种策略。我们将详细解析默认的重定向机制,包括 LoginController 和 RedirectIfAuthenticated 中间件,并重点介绍如何通过自定义登录逻辑实现精确的重定向控制,同时提供示例代码和常见问题排查建议,确保用…

    2026年9月21日
    200
  • Linux如何恢复被删除的用户数据

    恢复Linux被删数据需立即停用磁盘并使用photorec或extundelete等工具,结合快照或备份可提高恢复成功率。 恢复Linux中被删除的用户数据,并非易事,但并非完全不可能。可能性取决于数据被删除的方式、删除后系统是否被继续使用,以及是否采取了合适的预防措施。核心在于理解数据删除的机制,…

    2026年9月21日
    300
  • 如何通过命令行参数启动VSCode?

    掌握VSCode命令行用法可提升开发效率,需先安装code命令到PATH,之后可用code .打开目录、code 文件名打开文件、code –diff比较文件、–disable-extensions排查问题,并支持别名与Shell结合使用。 通过命令行启动 VSCode 是一…

    2026年9月21日
    200
  • windows怎么禁用sticky keys粘滞键_Windows粘滞键关闭方法

    粘滞键被误触后可通过快捷键、控制面板、注册表或组策略关闭。首先连续按Shift键五次,在弹出窗口中选择关闭;其次通过控制面板的“轻松使用”设置取消勾选启用粘滞键;若需彻底禁用,可修改注册表中StickyKeys项的Flags值为506;专业版用户还可通过组策略编辑器将“启用粘滞键”设为已禁用,防止再…

    2026年9月21日
    1000

发表回复

登录后才能评论
关注微信