首页 » PHP教程 » phptypeof技巧_PHP 83 GA

phptypeof技巧_PHP 83 GA

访客 2024-10-24 0

扫一扫用手机浏览

文章目录 [+]

类常量显式类型 (Typed class constants)

只读属性深拷贝

phptypeof技巧_PHP 83 GA

新增#[\Override] 属性

phptypeof技巧_PHP 83 GA
(图片来自网络侵删)

新增 json_validate() 函数

添加 Randomizer::getBytesFromString() 方法

添加 Randomizer::getFloat() 和 Randomizer::nextFloat() 方法

以及更好的性能、更好的语法、改进类型安全

下面先容部分语法的变革。

类型化类常量

PHP < 8.3

interfaceI{//WemaynaivelyassumethatthePHPconstantisalwaysastring.constPHP='PHP8.2';}classFooimplementsI{//Butimplementingclassesmaydefineitasanarray.constPHP=[];}

PHP 8.3

interfaceI{conststringPHP='PHP8.3';}classFooimplementsI{conststringPHP=[];}//Fatalerror:Cannotusearrayasvalueforclassconstant//Foo::PHPoftypestring

动态获取类常量

PHP < 8.3

classFoo{constPHP='PHP8.2';}$searchableConstant='PHP';var_dump(constant(Foo::class."::{$searchableConstant}"));

PHP 8.3

classFoo{constPHP='PHP8.3';}$searchableConstant='PHP';var_dump(Foo::{$searchableConstant});

只读属性深拷贝

readonly 属性现在可以在魔术方法__clone 中被修正一次,以此实现只读属性的深拷贝。

PHP < 8.3

classPHP{publicstring$version='8.2';}readonlyclassFoo{publicfunction__construct(publicPHP$php){}publicfunction__clone():void{$this->php=clone$this->php;}}$instance=newFoo(newPHP());$cloned=clone$instance;//Fatalerror:CannotmodifyreadonlypropertyFoo::$php

PHP 8.3

classPHP{publicstring$version='8.2';}readonlyclassFoo{publicfunction__construct(publicPHP$php){}publicfunction__clone():void{$this->php=clone$this->php;}}$instance=newFoo(newPHP());$cloned=clone$instance;$cloned->php->version='8.3';

新增#[\Override] 属性

通过给方法添加#[\Override] 属性,PHP 将确保在父类或实现的接口中存在同名的方法。
添加该属性表示明确解释覆盖父方法是故意为之,并且简化了重构过程,由于删除被覆盖的父方法将被检测出来。

PHP < 8.3

usePHPUnit\Framework\TestCase;finalclassMyTestextendsTestCase{protected$logFile;protectedfunctionsetUp():void{$this->logFile=fopen('/tmp/logfile','w');}protectedfunctiontaerDown():void{fclose($this->logFile);unlink('/tmp/logfile');}}//Thelogfilewillneverberemoved,becausethe//methodnamewasmistyped(taerDownvstearDown).

PHP 8.3

usePHPUnit\Framework\TestCase;finalclassMyTestextendsTestCase{protected$logFile;protectedfunctionsetUp():void{$this->logFile=fopen('/tmp/logfile','w');}#[\Override]protectedfunctiontaerDown():void{fclose($this->logFile);unlink('/tmp/logfile');}}//Fatalerror:MyTest::taerDown()has#[\Override]attribute,//butnomatchingparentmethodexists

新增 json_validate() 函数

json_validate() 可以检讨一个字符串是否为语法精确的 JSON,比 json_decode() 更有效。

PHP < 8.3

functionjson_validate(string$string):bool{json_decode($string);returnjson_last_error()===JSON_ERROR_NONE;}var_dump(json_validate('{"test":{"foo":"bar"}}'));//true

PHP 8.3

var_dump(json_validate('{"test":{"foo":"bar"}}'));//true

此外,PHP 8.0 的生命周期即将结束。
早在 2022 年 11 月 26 日,PHP 8.0 结束了积极支持,而安全支持也将在 PHP 8.3 正式发布三天后 ——2023 年 11 月 26 日停滞。

标签:

相关文章