网站首页 > 技术文章 正文
hello,大家好呀,我是杨杨!今天在闲暇之余看到php8.3版本,目前php.net官方最新版本是8.2版,关于php8.3的rfc,我找到的资料是在2022年提出的,因此,我整理了下关于这个未来会发布的版本的已知的特性分享给大家
json_validate() 函数
json_validate(string $json, int $depth = 512, int $flags = 0): bool
这里,$json是需要验证json字符串,$depth是解码结构的嵌套深度(最大值),$flags是解码标志的位码
正如我们所知,php8.3以前,PHP中还没有用于验证JSON的函数。我们必须做这样一个例子:
$json = '{"name": "Iman Borumand Zadeh"}';
$data = json_decode($json); // function to validate JSON
if (json_last_error() === JSON_ERROR_NONE) {
// Valid JSON
} else {
// Invalid JSON
}
但是在PHP 8.3版本中,添加了一个名为json_validate的新函数。这个函数为我们轻松地完成了验证JSON字符串的工作。只需将JSON输入给这个函数:
$json = '{"name": "Iman Borumand Zadeh"}';
if (json_validate($json)) {
// Valid JSON
} else {
// Invalid JSON
}
正如您所看到的,使用json_validate函数要容易得多,也方便得多。这个函数接收一个字符串输入,如果有效则返回true,否则返回false。
getFloat() 方法
getFloat()方法允许您在两个给定数字之间生成一个随机浮点数。
$randomizer = new \Random\Randomizer();
$randomizer->getFloat(0, 1); // 0.163456789
我们也可以使用这种方法来生成随机的纬度和经度
$randomizer = new \Random\Randomizer();
var_dump(
$randomizer->getFloat(-90, 90, \Random\IntervalBoundary::ClosedClosed),
$randomizer->getFloat(-180, 180, \Random\IntervalBoundary::OpenClosed)
);
// Lat: float(-45.123456789)
// Long: float(123.123456789)
nextFloat() 方法
此方法允许您生成一个介于0和1之间的随机浮点数。
$randomizer = new \Random\Randomizer();
$randomizer->nextFloat(); // 0.123456789
$randomizer->nextFloat(); // 0.987654321
动态获取类常量
到目前为止,PHP还支持动态或计算函数和属性。
$baz = 'foo';
$baz = 'bar';
^
// $foo
// 动态调用类函数
class Foo
{
public function hello()
{
echo 'Hello world!';
}
}
$dynamicMethod = 'hello';
$a = new Foo();
$a->{$dynamicMethod}(); //prints 'Hello!'
但是,动态调用类常量还不可能。但是,再在PHP 8.3中,您可以期待这个特性的出现。
class Foo
{
public const BAR = 'bar';
}
$dynamicConstant = 'BAR';
echo Foo::{$dynamicConstant};
//prints 'bar'
如果您试图访问一个不存在的常量,它将抛出如下所述的错误。
class Foo {}
$bar = 'BAR';
echo Foo::{$bar};
// Error: Undefined constant Foo::BAR
Unserialize()错误处理改进
PHP当前的错误报告unserialize()非常不一致,这使得很难可靠地处理反序列化期间发生的错误。在PHP 8.3中将添加新的\UnserializationFailedException。另外,改进错误处理。
让我们来看一个例子:
try {
set_error_handler(static function ($severity, $message, $file, $line) {
throw new \ErrorException($message, 0, $severity, $file, $line);
});
$result = unserialize($serialized);
} catch (\Throwable $e) {
// Unserialization失败了。如果不应该处理错误,Catch块是可选的。
} finally {
restore_error_handler();
}
在这里,您需要设置错误处理程序、捕获异常并恢复错误处理程序。您甚至不能保证在发生异常时恢复错误处理程序选项能够无缝地工作。这可能会有很多麻烦。
但是,新的PHP 8.3提供了一个改进的unserialize()函数。因此,如果unserialize()方法失败,它将抛出一个UnserializationFailedException异常。E_WARNING或E_NOTICE将被转换为异常,包装在UnserializationFailedException实例中。它使捕获和处理错误变得更加容易。
因此,不需要编写前面提到的代码片段,你可以像这样使用unserialize方法:
try {
$result = unserialize('B:2:"jon";');
var_dump($result);
} catch (\UnserializationFailureException $e) {
// unserialization failed.
}
猜你喜欢
- 2024-11-11 php+json+mysql实现前后端分离(php vue前后端分离)
- 2024-11-11 PHP中json解析失败原因, json_decode返回null解析失败原因
- 2024-11-11 如何使php的数组传递到js中(如何使php的数组传递到js中)
- 2024-11-11 Python操作JSON格式数据的技巧(python解析json数据)
- 2024-11-11 Linux(centos)用yum方式安装php最新版
- 2024-11-11 PHP 8.3 正式发布!(php8.0新功能)
- 2024-11-11 使用json_encode打印中文字符并且格式化(php代码)
- 2024-11-11 PhpStorm 2022.2 已发布(phpstorm2018)
- 2024-11-11 通过WordPress HTTP API 获取json内容并解析
- 2024-11-11 JSON 与 Xml的对决(json vs xml)
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)