PHP 8.4 终于来了,带来了令人兴奋的变化,这些变化将改变开发人员的工作方式!随着每一个新版本的出现,PHP 都不断证明为什么它是当今 Web 开发领域如此重要的工具。
先决条件
本文假设您具备 PHP 编程语言的基本知识。
我用于 PHP 开发的软件
Laravel Herd:用于管理我的 PHP 版本和 Nginx 服务器。
PHPStorm:一款出色的 IDE,具有良好的 IntelliSense 和 AI 副驾驶功能。
Laragon:一个易于使用的本地开发环境,支持 PHP 等技术。
不对称属性可见性(版本 2)?
在 PHP 中,对象属性的可见性传统上是对称的。这意味着属性的 get 和 set 操作必须共享相同的可见性(公共、私有或受保护),但不能不同。
例如,如果一个属性是公共的,则对其的读取和写入都是公共的,无法允许其中一个操作而没有另一个操作。
在上下文中,当您将类的属性声明为公共时,它就会变得可变,从而允许从类外部读取和修改它。
但是,随着不对称可见性的出现,您现在可以定义单独的范围来读取和写入属性。
这意味着属性可以在一种上下文中可读,在另一种上下文中可写,从而更好地控制属性的访问和修改方式。
class Animal{ public private(set) string $name; public setName(string $foo){ $ths->name = $foo; } } $animal = new Animal(); echo $animal->name; // This will run correctly
我们可以将一个属性设为公开,并将设定的属性设为私有。这意味着该属性无法在类外部更新,从而使其不可变。
如果您尝试修改 $name 属性,您将收到一条错误,显示由于可见性范围而无法修改该属性。
以下是关于不对称可见性需要注意的几个要点:
set-visibility 声明中不允许有空格。私人(设置)是正确的。 private( set ) 不正确,会导致解析错误。
如果属性被声明为公共,则可以省略主要可见性。例如,public private(set) 和 private(set) 的行为相同,因为隐含了公共可见性。
只有类型化属性才允许对集合操作具有单独的可见性。这意味着您无法将非对称可见性应用于 PHP 中的非类型化属性。
设置的可见性必须与获取的可见性相同或更严格。例如,public protected(set) 和 protected protected(set) 是有效的,但 protected public(set) 会导致语法错误。
了解有关不对称可见性的更多信息,包括供您细读的其他示例。
财产挂钩?
Property hook 是 PHP 8.4 的一个很棒的功能,它为开发人员引入了一种直接向变量添加 get 和 set 指令的方法,而无需明确创建读取和写入变量的方法。
或者,可以使用 __get 和 __set 魔术方法,但这会使代码更加冗长,可能会引入错误,并破坏静态分析工具。
可以肯定地说,属性钩子的设计和语法与 Kotlin 类似,但主要受 C# 和 Swift 编程语言的影响。
在 PHP 8.3 中,我们可以创建一个在其构造函数中包含属性的类,并且它使我们能够读取和写入该属性。
class Animal{ public private(set) string $name; public setName(string $foo){ $ths->name = $foo; } } $animal = new Animal(); echo $animal->name; // This will run correctly
这种方法的问题在于,当我们决定写入属性时,我们要么使用 __set 魔术方法,要么明确地创建一个方法来改变变量,这可能会导致代码库中断。
属性挂钩允许开发人员在创建属性后立即创建 set 指令。
class Car { public function __construct(public string $model) { } }
请注意,传递给 set 指令的值必须与属性的类型相同,否则会抛出错误。
您可以将另一种类型传递给 set 指令,并在写入属性之前将其转换为正确的类型,如下所示:
class Car{ public string $model{ set (string $value) { if(strlen($value) === 0){ throw new ValueError("Model name cannot be empty"); } $this->model = $value; } } }
上面的示例展示了我们如何安全地从 set 指令接收复合类型变量并将其解析为属性定义的正确类型。
如果传递给 set 指令的参数与属性类型相同,则可以省略。例如,下面的两个方法都是有效的并且行为类似。
class Car{ public string $year{ set (string|number $value) { $year = intval($value); if($year year= $value; } } }
请注意,如果省略参数,则默认为 $value。这种语法在 Kotlin 和 C# 等编程语言中很常见。
实例化类而无需额外的括号
在此功能之前,在 PHP 中访问类的成员需要在类周围添加额外的括号。
// --------------------------METHOD 1---------------------------- public string $model{ set (string $value) { if(strlen($value) === 0){ throw new ValueError("Model name cannot be empty"); } $this->model = $value; } } // --------------------------METHOD 2---------------------------- public string $model{ set { if(strlen($value) === 0){ throw new ValueError("Model name cannot be empty"); } $this->model = $value; } }
如果不将 new Car() 调用括在括号中,则会出现解析错误。
新语法允许我们访问方法、属性和常量,而无需额外的括号。
class Car { public function getName(){ return "Toyota Camry"; } } $carName = (new Car())->getName();
有关此提议更改的完整详细信息,请查看 RFC 中的详细信息。
引入新的数组函数
PHP 8.4 即将推出新的辅助函数。
其中一些函数已经在 Laravel Arr 或 Collection 助手中实现。
array_find_key() 函数
array_find_key($array, $callback) 函数返回 $callback 方法返回 true 的第一个元素的键。如果没有元素满足条件,函数返回 null。
class Animal{ public private(set) string $name; public setName(string $foo){ $ths->name = $foo; } } $animal = new Animal(); echo $animal->name; // This will run correctly
array_find() 函数
array_find_key() 函数旨在搜索数组并返回满足回调函数定义的条件的第一个元素的键。
与 array_find_key() 类似,如果没有找到匹配的元素,则返回 null。
class Car { public function __construct(public string $model) { } }
如果数组中没有水果的数量大于 10,该函数将返回 null。
array_any() 函数
array_any() 函数确定数组中的至少一个元素是否满足所提供的评估函数指定的特定标准。
如果至少有一个元素满足条件,函数返回true;否则,返回 false。
class Car{ public string $model{ set (string $value) { if(strlen($value) === 0){ throw new ValueError("Model name cannot be empty"); } $this->model = $value; } } }
如果数组中没有数字大于 10,函数将返回 false。
array_all() 函数
array_all() 函数检查数组中的每个项目是否通过特定测试。它对每个项目应用特殊规则(回调函数)。
如果所有项目都根据规则通过测试,则 array_all() 返回 true。
class Car{ public string $year{ set (string|number $value) { $year = intval($value); if($year year= $value; } } }
在此示例中,array_all() 函数将迭代 $numbers 数组并将回调函数应用于每个元素。回调检查数字是否能被 2 整除(即偶数)。
由于数组中的所有数字都是偶数,因此 array_all() 函数将返回 true,并显示消息“所有数字都是偶数”。将显示。
我们已经研究了 PHP 8.4 中引入的关键改进。这些更新为开发人员提供了宝贵的增强功能,包括强大的新功能和潜在的效率提升。
要深入了解所有更新,包括示例和详细说明,请访问官方 PHP 8.4.0 发布公告页面。
不要忘记查看弃用和向后兼容性更改,以确保顺利过渡到最新版本。
接下来是什么? ?
如果您喜欢这篇文章,请不要忘记与他人分享。
我很想听听您的想法 - 请在下面发表评论,让我们继续对话。干杯! ?
关注我,获取更多 PHP、Node.js、TypeScript 和 PHP 文章!您还可以在 Twitter 或 LinkedIn 上找到我。
以上是PHP:主要功能和改进的详细内容。更多信息请关注PHP中文网其他相关文章!

Thedifferencebetweenunset()andsession_destroy()isthatunset()clearsspecificsessionvariableswhilekeepingthesessionactive,whereassession_destroy()terminatestheentiresession.1)Useunset()toremovespecificsessionvariableswithoutaffectingthesession'soveralls

stickysessensureuserRequestSarerOutedTothesMeServerForsessionDataConsisterency.1)sessionIdentificeAssificationAssigeaSsignAssignSignSuserServerServerSustersusiseCookiesorUrlModifications.2)一致的ententRoutingDirectSsssssubsequeSssubsequeSubsequestrequestSameSameserver.3)loadBellankingDisteributesNebutesneNewuserEreNevuseRe.3)

phpoffersvarioussessionsionsavehandlers:1)文件:默认,简单的ButMayBottLeneckonHigh-trafficsites.2)Memcached:高性能,Idealforsforspeed-Criticalapplications.3)REDIS:redis:similartomemememememcached,withddeddeddedpassistence.4)withddeddedpassistence.4)databases:gelifforcontrati forforcontrati,有用

PHP中的session是用于在服务器端保存用户数据以在多个请求之间保持状态的机制。具体来说,1)session通过session_start()函数启动,并通过$_SESSION超级全局数组存储和读取数据;2)session数据默认存储在服务器的临时文件中,但可通过数据库或内存存储优化;3)使用session可以实现用户登录状态跟踪和购物车管理等功能;4)需要注意session的安全传输和性能优化,以确保应用的安全性和效率。

PHPsessionsstartwithsession_start(),whichgeneratesauniqueIDandcreatesaserverfile;theypersistacrossrequestsandcanbemanuallyendedwithsession_destroy().1)Sessionsbeginwhensession_start()iscalled,creatingauniqueIDandserverfile.2)Theycontinueasdataisloade

绝对会话超时从会话创建时开始计时,闲置会话超时则从用户无操作时开始计时。绝对会话超时适用于需要严格控制会话生命周期的场景,如金融应用;闲置会话超时适合希望用户长时间保持会话活跃的应用,如社交媒体。

服务器会话失效可以通过以下步骤解决:1.检查服务器配置,确保会话设置正确。2.验证客户端cookies,确认浏览器支持并正确发送。3.检查会话存储服务,如Redis,确保其正常运行。4.审查应用代码,确保会话逻辑正确。通过这些步骤,可以有效诊断和修复会话问题,提升用户体验。

session_start()iscucialinphpformanagingusersessions.1)ItInitiateSanewsessionifnoneexists,2)resumesanexistingsessions,and3)setsasesessionCookieforContinuityActinuityAccontinuityAcconActInityAcconActInityAcconAccRequests,EnablingApplicationsApplicationsLikeUseAppericationLikeUseAthenticationalticationaltication and PersersonalizedContentent。


热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

Dreamweaver CS6
视觉化网页开发工具