登录 立即注册

首页 > 绿虎论坛 > 建站 > 讨论/求助 (发帖)

标题: PHP 8.2 已发布!

作者: @Ta

时间: 2022-12-12

点击: 17800

老虎快更上

PHP 8.2 是 PHP 语言的一个主版本更新。它包含了只读类、null、false 和 true 作为独立的类型、废弃动态属性、性能改进等。
更新到 PHP 8.2 !
只读类 RFC 文档
PHP < 8.2
class BlogData
{
    public readonly string $title;

    public readonly Status $status;

    public function __construct(string $title, Status $status)
    {
        $this->title = $title;
        $this->status = $status;
    }
}
PHP 8.2
readonly class BlogData
{
    public string $title;

    public Status $status;

    public function __construct(string $title, Status $status)
    {
        $this->title = $title;
        $this->status = $status;
    }
}
析取范式 (DNF)类型 RFC 文档
PHP < 8.2
class Foo {
    public function bar(mixed $entity) {
        if ((($entity instanceof A) && ($entity instanceof B)) || ($entity === null)) {
            return $entity;
        }

        throw new Exception('Invalid entity');
    }
}
PHP 8.2
class Foo {
    public function bar((A&B)|null $entity) {
        return $entity;
    }
}
DNF 类型允许我们组合 union 和 intersection类型,遵循一个严格规则:组合并集和交集类型时,交集类型必须用括号进行分组。
允许 null、false 和 true 作为独立类型 RFC RFC
PHP < 8.2
class Falsy
{
    public function almostFalse(): bool { /* ... */ *}

    public function almostTrue(): bool { /* ... */ *}

    public function almostNull(): string|null { /* ... */ *}
}
PHP 8.2
class Falsy
{
    public function alwaysFalse(): false { /* ... */ *}

    public function alwaysTrue(): true { /* ... */ *}

    public function alwaysNull(): null { /* ... */ *}
}
新的“随机”扩展 RFC RFC 文档
PHP 8.2
use Random\Engine\Xoshiro256StarStar;
use Random\Randomizer;

$blueprintRng = new Xoshiro256StarStar(
    hash('sha256', "Example seed that is converted to a 256 Bit string via SHA-256", true)
);

$fibers = [];
for ($i = 0; $i < 8; $i++) {
    $fiberRng = clone $blueprintRng;
    // Xoshiro256**'s 'jump()' method moves the blueprint ahead 2**128 steps, as if calling
    // 'generate()' 2**128 times, giving the Fiber 2**128 unique values without needing to reseed.
    $blueprintRng->jump();

    $fibers[] = new Fiber(function () use ($fiberRng, $i): void {
        $randomizer = new Randomizer($fiberRng);

        echo "{$i}: " . $randomizer->getInt(0, 100), PHP_EOL;
    });
}

// The randomizer will use a CSPRNG by default.
$randomizer = new Randomizer();

// Even though the fibers execute in a random order, they will print the same value
// each time, because each has its own unique instance of the RNG.
$fibers = $randomizer->shuffleArray($fibers);
foreach ($fibers as $fiber) {
    $fiber->start();
}
“随机”扩展为随机数生成提供了一个新的面向对象的 API。这个面向对象的 API 提供了几个类(“引擎”),提供对现代算法的访问,这些算法在对象中存储其状态,以允许多个独立的可播种序列,而不是依赖于使用 Mersenne Twister 算法的全局种子随机数发生器(RNG)。

\Random\Randomizer 类提供了一个高级接口来使用引擎的随机性来生成随机整数、随机排列数组或字符串、选择随机数组键等。

Traits 中的常量 RFC 文档
PHP 8.2
trait Foo
{
    public const CONSTANT = 1;
}

class Bar
{
    use Foo;
}

var_dump(Bar::CONSTANT); // 1
var_dump(Foo::CONSTANT); // Error
您不能通过 trait 名称访问常量,但是您可以通过使用 trait 的类访问常量。
弃用动态属性 RFC 文档
PHP < 8.2
class User
{
    public $name;
}

$user = new User();
$user->last_name = 'Doe';

$user = new stdClass();
$user->last_name = 'Doe';
PHP 8.2
class User
{
    public $name;
}

$user = new User();
$user->last_name = 'Doe'; // Deprecated notice

$user = new stdClass();
$user->last_name = 'Doe'; // Still allowed
动态属性的创建已被弃用,以帮助避免错误和拼写错误,除非该类通过使用 #[\AllowDynamicProperties] 属性来选择。stdClass 允许动态属性。

__get/__set 魔术方法的使用不受此更改的影响。

新的类、接口和函数
新增 mysqli_execute_query 函数和 mysqli::execute_query 方法。
新增 #[\AllowDynamicProperties] 和 #[\SensitiveParameter] 属性。
新增 ZipArchive::getStreamIndex、ZipArchive::getStreamName 和 ZipArchive::clearError 方法。
新增 ReflectionFunction::isAnonymous 和 ReflectionMethod::hasPrototype 方法。
新增 curl_upkeep、memory_reset_peak_usage、ini_parse_quantity、libxml_get_external_entity_loader、sodium_crypto_stream_xchacha20_xor_ic 和 openssl_cipher_key_length 方法。
弃用和向后不兼容
弃用 ${} 字符串插值。
弃用 utf8_encode 和 utf8_decode 函数。
DateTime::createFromImmutable 和 DateTimeImmutable::createFromMutable 方法暂定返回类型为 static。
ODBC 和 PDO_ODBC 扩展转义用户名和密码。
strtolower 和 strtoupper 函数不再对语言环境敏感。
SplFileObject::getCsvControl、SplFileObject::fflush、SplFileObject::ftell、SplFileObject::fgetc 和 SplFileObject::fpassthru 方法强制执行它们的签名。
SplFileObject::hasChildren 方法暂定返回类型为 false。
SplFileObject::getChildren 方法暂定返回类型为 null。
内置方法 SplFileInfo::_bad_state_ex 已被废弃。
更好的性能、更好的语法、改进类型安全。
更新到 PHP 8.2 !
请访问 下载 页面下载 PHP 8.2 源代码。 在 PHP for Windows 站点中可找到 Windows 二进制文件。 ChangeLog 中有变更历史记录清单。

PHP 手册中有 迁移指南。 请参考它描述的新功能详细清单、向后不兼容的变化。
我是晨曦,我喂自己袋盐!

[隐藏样式|查看源码]


『回复列表(11|隐藏机器人聊天)』

2.

@晨曦,你自己试试呗,我觉得唯一的问题可能是部分类需要添加#[\AllowDynamicProperties]

(/@Ta/2022-12-12 19:55//)

3.

fiber呢,我现在还在用 yield from解决 io等待问题

(/@Ta/2022-12-13 10:32//)

4.

<script>
console.log('12312312')
</script>
iPhone13 PRO MAX 1T 国行远峰蓝 非海南免税版

(/@Ta/2022-12-24 19:34//)

5.

@idc状态,要加<script>

HTML代码

(/@Ta/2022-12-13 15:27//)

6.

HTML代码

小米8(白)

(/@Ta/2022-12-25 23:00//)

7.

为啥都在向强类型语言靠拢
小米8 Explore Edition (透明色)

(/@Ta/2022-12-26 17:32//)

8. @晨曦
相信很快就会出现支持php8.2的手机端Web服务器应用。
(/@Ta/2022-12-30 10:57//)

9. @希望自己长胖胖,74都没怎么普及 8.0也不多 56我也看到有人用
我是晨曦,我喂自己袋盐!
(/@Ta/2022-12-30 11:50//)

10.

@希望自己长胖胖Termux 可以吗?我记得它的包都很新的

(/@Ta/2022-12-30 13:11//)

11. 有啥用
(/@Ta/2023-01-04 17:16//)

12. 为啥评论还有审核
(/@Ta/2023-01-04 17:17//)

回复需要登录

11月27日 08:58 星期三

本站由hu60wap6华为CPU驱动

备案号: 京ICP备18041936号-1