PHP学习笔记(九)

news2025/7/15 19:12:44

箭头函数

箭头函数是 PHP 7.4的新语法。是一种更简洁的匿名函数的写法,它们都是closure类的实现。

箭头函数的基本语法为fn(argument_list) => expr

箭头函数支持与匿名函数相同的功能,只是其父作用域的变量总是自动的。

当表达式中使用的变量是在父作用域中定义的,它将被隐式的按值捕获。

在箭头函数嵌套的情况下同样有效

和匿名函数一样,箭头函数同样允许标准的函数声明,包括参数和返回类型、缺省值、变量,以及通过引用传递和返回。

箭头函数会自动绑定上下文变量,相当于对箭头函数内部使用的每一个变量$x 执行了一个use($x)。这意味着不可能修改外部作用域的任何值,实现对值的修改,可用匿名函数来替代。

this  绑定特殊情况

class Example {
    private $value = 10;
    public method() {
        $fn = fn() => $this->value;  // 正确绑定
    }
}

First class callable 语法

从PHP 8.1开始引入first class callable 语法,作为从callable创建匿名函数的一种方法,取代了使用字符串和数组的现有callable语法。优点是可以进行静态分析,并使用获得可调用对象的作用域。

CallableExpr(...)语法从callable创建Closure CallableExpr 接受任何可以在PHP语法中直接调用的表达式:

CallableExpr(...) 与Close::fromCallable()语义相同。也就是说,与使用字符串和数组的callable不同,CallableExpr(...)尊重其创建时的作用域:

类与对象

PHP具有完整的对象模型。特性包括:访问控制,抽象类和final类与方法,附加的魔术方法,接口,对象复制。

PHP对待对象的方式等同于引用或句柄,即每个变量都持有对象的引用,而不是整个对象的复制。

基本概念

class

每个类的定义都以关键字class开头,后面跟类名,后面跟着一对花括号,里面包含类的属性与方法的定义。

类名可以是任何不是PHP保留字的有效标签。自PHP8.4起,弃用使用单个下划线_ 作为类名。有效类名以字母或下划线开头,后面跟着若干字母、数字或下划线。

一个类可以包含有属于自己的常量,变量(称为“属性”)以及函数(称为“方法”)。

当一个方法在类定义内部被调用时,有个可用的伪变量 $this ,是一个到当前对象的引用。

只读类

自PHP 8.2起 , 可以用readonly 修饰符来标记类。将类标记为readonly只会向每个声明的属性添加readonly 修饰符并禁止创建动态属性,除此之外,不能用AllowDynamicProperties注解来添加对后者的支持,这样会触发编译错误。

由于无类型的属性和静态属性不能用readonly修饰符,所以readonly不会对其声明:

仅当子类也是readonly类时,才可以继承readonly类

new

要创建一个类的实例,必须用new关键字。创建新对象时该对象总是被赋值,除非该对象定义了构造函数并在出错时抛出了一个异常。类应在被实例化之前定义(某些情况下则必须这样)。

如果一个变量包含一个类名的string和new时,将创建该类的一个新实例。若该类属于一个命名空间,则必须使用其完整名称。

PHP 8.0起,支持任意表达式中使用new。如果表达式生成一个string,这将允许更复杂的实例化。表达式必须使用括号括起来。

在类定义内部,可用new self 和new parent 创建新对象。

当把一个对象已经创建的实例赋给一个新变量,新变量会访问同一个实例,就和用该对象赋值一样。此行为和给函数传递入实例一样。可用克隆给一个已创建的对象建立一个新实例。

有几种方法可以创建一个对象的实例。

可以通过一个表达式来访问新创建对象的成员:

属性和方法

类的属性和方法存在于不同的“命名空间”中,这意味着同一个类的属性和方法可以使用同样的名字。在类中访问属性和调用方法使用同样的操作符,具体时访问一个属性还是调用一个方法,取决于你的上下文,即用法是变量访问还是函数调用。

这意味着,如果你的类属性被分配给一个匿名函数将无法直接调用它,因为访问类属性的优先级更高,在此场景下需要用括号包裹起来调用。

参考资料

PHP手册

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2387812.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

信创 CDC 实战 | OGG、Attunity……之后,信创数据库实时同步链路如何构建?(以 GaussDB 数据入仓为例)

国产数据库加速进入核心系统,传统同步工具却频频“掉链子”。本系列文章聚焦 OceanBase、GaussDB、TDSQL、达梦等主流信创数据库,逐一拆解其日志机制与同步难点,结合 TapData 的实践经验,系统讲解从 CDC 捕获到实时入仓&#xff0…

微服务(SpringCloud)的简单介绍

一.什么是微服务? 微服务是一种软件架构风格,核心思想是用职责单一的小型项目,组合出复杂的大型项目。 二.举例 1.单体架构(SpringBoot) 无论项目中有多少功能,都是放在一个项目中。 如下图所示&#xff1…

Python 爬虫开发

文章目录 1. 常用库安装2. 基础爬虫开发2.1. 使用 requests 获取网页内容2.2. 使用 BeautifulSoup 解析 HTML2.3. 处理登录与会话 3. 进阶爬虫开发3.1. 处理动态加载内容(Selenium)3.2. 使用Scrapy框架3.3. 分布式爬虫(Scrapy-Redis&#xff…

第十一周作业

一、实现bluecms旁注,并解释为什么旁站攻击可以拿下主站?跨库的意思是什么? 1、为什么旁站攻击可以拿下主站 因为主站业务和旁站业务共处于同一个服务器上面,当我们无法攻破主站业务时,可以通过攻破旁站业务&#xf…

猿大师办公助手网页编辑Office/wps支持服务器文件多线程下载吗?

浏览器兼容性割裂、信创替代迫切的2025年,传统WebOffice控件因依赖NPAPI/PPAPI插件已无法适配Chrome 107等高版本浏览器。猿大师办公助手通过系统级窗口嵌入技术,直接调用本地Office/WPS内核,实现: 真内嵌非弹窗:将Of…

英码科技携带 “无感知AI数字课堂”解决方案,亮相第22届广东教育装备展

5月23日至25日,第22届广东教育装备展览会在广州国际采购中心盛大举行。作为华为生态重要合作伙伴,英码科技携“无感知AI数字课堂解决方案”重磅登场,聚焦教学提质增效,为教育数字化转型注入新动能。 聚焦课堂真实场景,…

【R语言科研绘图】

R语言在绘制SCI期刊图像时具有显著优势,以下从功能、灵活性和学术适配性三个方面分析其适用性: 数据可视化库丰富 R语言拥有ggplot2、lattice、ggpubr等专业绘图包,支持生成符合SCI期刊要求的高分辨率图像(如TIFF/PDF格式&#…

ProfiNet转Ethernet/IP网关选型策略适配西门子S7-1500与罗克韦尔ControlLogix5580的关键指标对比

一、行业背景 新能源汽车电池制造是当前工业自动化领域增长最快的细分市场之一。随着动力电池产能扩张与技术迭代,产线对高精度装配、实时数据交互和系统兼容性提出了更高要求。在某头部电池企业的模组装配线中,面临着不同品牌设备通信协议不兼容的问题&…

[图文]图6.3会计事项-Fowler分析模式的剖析和实现

1 00:00:02,090 --> 00:00:05,160 Fowler在书里面也说了,6.4 2 00:00:05,290 --> 00:00:07,540 这里也说了 3 00:00:08,030 --> 00:00:11,340 不是常用的 4 00:00:12,520 --> 00:00:15,060 更倾向用6.2,实际上就是6.3了 5 00:00:15,760 …

【Linux】shell脚本的常用命令

目录 简介 一.设置主机名称 1.1通过文件修改 1.2通过命令修改 二.网络管理命令nmcli 2.1查看网卡 2.2设置网卡 三.简单处理字符 3.1seq打印连续字符 3.2printf,echo打印字符 3.3sort排序 3.4uniq冗余处理 3.5cut对字符的截取 四.xargs输入转参 简介 以下命令都是…

Pycharm and Flask 的学习心得(9)

request对象: 1. request包含前端发送过来的所有请求数据 将from表单里的内容CV到request里面,可以添加if语句来做判断出请求类型后的操作 在网页上的表单上input的数据,后端如何获取呢? request对象获取前端发送来的数据 // …

Linux初始-环境安装(2)

文章目录 安装问题(1-1.51.39)xshell的下载和登录步骤xshell创建多用户与删除用户xshell免密码登录 简介:这篇文章我认为对于初学Linux还是非常重要的,正所谓磨刀不误砍柴工,工具环境准备好了,后面的学习才…

Python Day34 学习

今日内容 通过“心脏病数据集”对之前的内容进行复习,再进行新内容“元组和OS模块”的学习。 机器学习模型建模和评估(先不考虑调参) 基于之前已经预处理过的心脏病数据集 划分数据值 模型训练与模型评估 # 随机森林 rf_model RandomFo…

【ASR】基于分块非自回归模型的流式端到端语音识别

论文地址:https://arxiv.org/abs/2107.09428 摘要 非自回归 (NAR) 模型在语音处理中越来越受到关注。 凭借最新的基于注意力的自动语音识别 (ASR) 结构,与自回归 (AR) 模型相比,NAR 可以在仅精度略有下降的情况下实现有前景的实时因子 (RTF) 提升。 然而,识别推理需要等待…

国芯思辰|国产FRAM SF25C128助力监控系统高效低功耗解决方案,对标MB85RS128/FM25V01

监控系统已成为保障公共安全、维护社会秩序的重要工具。随着监控系统的不断发展,对数据存储的要求也越来越高,不仅需要大容量、高速度的存储设备,还要求其具备高可靠性和低功耗等特性。国产铁电存储器 SF25C128作为一种新型非易失性存储器&am…

攻防世界逆向刷题笔记(新手模式9-1?)

bad_python 看样子是pyc文件损坏了。利用工具打开,发现是MAGIC坏了。搜下也没有头绪。 攻防世界-难度1- bad_python - _rainyday - 博客园 python Magic Number对照表以及pyc修复方法 - iPlayForSG - 博客园 看WP才知道36已经提示了pyc版本了。参考第二个文章&am…

制作一款打飞机游戏58:子弹模式组合

今天我们将继续深入探讨子弹模式系统,并在我们的模式编辑器上做一些收尾工作。 子弹模式系统的乐趣 首先,我想说,这个子弹模式系统真的非常有趣。看着屏幕上不断喷射的子弹,感觉真是太棒了! 合并修饰符 今天&#…

使用新一代达梦管理工具SQLark,高效处理 JSON/XML 数据!

在应用开发领域,JSON/XML数据结构因其灵活性和通用性,成为开发者存储和交换数据的首选。然而,传统管理工具在处理这些半结构化数据时,往往存在可视化效果差、编辑效率低等问题,严重影响开发者的工作效率。 现在&#…

深入了解PyTorch:起源、优势、发展与安装指南

深入了解PyTorch:起源、优势、发展与安装指南 目录 引言PyTorch简介PyTorch的优势 动态计算图直观易用的API强大的社区支持丰富的生态系统高性能与可扩展性 PyTorch的发展历程PyTorch的主要组件 Torch.TensorAutograd自动求导nn模块TorchvisionTorchText和TorchAu…

DeepSeek智能对话助手项目

目录: 1、效果图2、实现代码3、温度和TopK的作用对比 1、效果图 2、实现代码 # import gradio as gr# def reverse_text(text): # return text[::-1]# demogr.Interface(fnreverse_text,inputs"text",outputs"text")# demo.launch(share&q…