PHP 8.3 新特性 - getBytesFromString 方法

作者: 温新

图书: 【PHP 8.3 新特性】

阅读: 543

时间: 2024-11-20 16:59:40

hi,我是温新,一名 PHPer

PHP 8.3 中,Random 扩展增加了一个新方法:\Random\Randomizer::getBytesFromString。该方法用于从字符串中生成随机字节

TIP

该方法是在字节级别工作。它不能有效地对多字节字符,如 Emojis, CJK characters, and Eastern/Indo 。

public Random\Randomizer::getBytesFromString(string $string, int $length): string

参数解释

  • $string:要从中生成随机字节的字符串;
  • $length:要生成的随机字节序列的长度。

返回值

  • 返回一个由指定长度的随机字节组成的字符串。

getBytesFromString 案例

<?php

use Random\Randomizer;

$randomizer = new Randomizer();
echo $randomizer->getBytesFromString("Hello, World!", 3); // o,l

在这个案例中,创建了一个 Randomizer 对象,并使用 getBytesFromString 方法从字符串 "Hello, World!" 中随机选择 3 个字节。

<?php

$randomizer = new Random\Randomizer();
$string = '0123456789';

echo $randomizer->getBytesFromString($string, 2) . PHP_EOL;
echo $randomizer->getBytesFromString($string, 2) . PHP_EOL;
echo $randomizer->getBytesFromString($string, 5) . PHP_EOL;
echo $randomizer->getBytesFromString($string, 5) . PHP_EOL;
echo $randomizer->getBytesFromString($string, 8) . PHP_EOL;
echo $randomizer->getBytesFromString($string, 8) . PHP_EOL;

输出结果

26
15
88678
92872
26835487
40013106

使用 getBytesFromString 时需要注意:

  • $string 参数中允许有重复字符。多次出现会增加特定字符出现在返回的随机值中的概率。
  • 如果 $string 参数为空,则抛出 \ValueError 异常。
  • 如果 $length <= 0 ,则抛出 \ValueError 异常。
  • 如果基础引擎无法生成请求长度的随机字节序列,则引发 \Random\BrokenRandomEngineError 异常
请登录后再评论