ホームページ  >  記事  >  バックエンド開発  >  PHP 8.3 ビッグ リリース: 革新と強化、未来を創造する

PHP 8.3 ビッグ リリース: 革新と強化、未来を創造する

DDD
DDDオリジナル
2023-11-24 11:01:111863ブラウズ

PHP 8.3 は 2023 年 11 月 23 日にリリースされ、言語の進化における新たな重要な一歩を示しました。このリリースでは、PHP 開発エクスペリエンスを強化するために設計された多くの新機能、パフォーマンスの向上、非推奨が導入されています。この包括的なガイドでは、これらのアップデートについて詳しく説明し、PHP 8.3 に適応して最大限に活用するのに役立つ洞察、ヒント、創造的なコード例を提供します。

読み取り専用クラスの機能強化

PHP 8.3 では、読み取り専用クラスのクローン作成動作が変更され、クローン作成中に読み取り専用プロパティを再初期化できるようになりました。この変更は、ディープ クローン作成における特定のエッジ ケースに対処します。次の例を参照してください:

class Article {
    public readonly DateTime $publishedOn;
    public function __construct(DateTime $publishedOn) {
        $this->publishedOn = $publishedOn;
    }
    public function __clone() {
        // PHP 8.3 允许
        $this->publishedOn = new DateTime();
    }
}

この 変更により、特に複雑な構造を持つオブジェクトをコピーする場合に、読み取り専用プロパティをより柔軟に管理できるようになります。 。

型付きクラス定数

PHP 8.3 では、開発者がクラス定数の型を指定できるため、型安全性が向上し、コードがクリーンになります。例:

class Config {
    const API_KEY = 'your-api-key';
}

この 機能は、クラス定数の堅牢性を強化し、クラス定数をクラス コントラクトの不可欠な部分にします。

#[Override] 属性

PHP 8.3 中的 #[Override]属性用于声明某个方法有意重写父方法。该属性可在重命名或删除父方法时捕获错误,从而提高代码质量。例如:

abstract class BaseClass
{
    public function defaultMethod(): int
    {
        return 1;
    }
}
final class DerivedClass extends BaseClass
{
    #[Override]
    public function defaultMethod(): int
    {
        return 2;// 故意重写
    }
}

属性增加了额外的安全层,确保您的覆盖始终是有意且可识别的。

数组中的负索引

PHP 8.3 对数组处理负索引方式进行了改进。在以前的版本中,如果使用负索引将一个项目添加到空数组,然后添加另一个项目,则第二个项目会从 0 开始。在 PHP 8.3 中,第二个项目将放置在下一个负索引处,即 -1。例如:

$array = [];
$array[-1] = '第一个';
$array[] = '第二';
var_export($array); // [&#39;first&#39;, &#39;second&#39;] 在 PHP < 8.3 中,[&#39;first&#39;, &#39;second&#39;] 在 PHP 8.3 中

一变化使得负指数的处理更加可预测和一致。

匿名只读类

PHP 8.3 引入了对匿名类标记为只读的支持,这为动态创建不可变对象提供了更大的灵活性。例如:

$anonymousClass = new readonly class {
    public function __construct(
        public string $name = &#39;Anonymous&#39;,
    ) {}
};

增强功能使只读类在各种编程场景中更加通用,扩大了其应用范围。

新函数 json_validate

PHP 8.3 新增的 json_validate() 函数提供了一种节省内存的方法来检查字符串是否为有效的 JSON。此函数特别适用于需要验证 JSON 而不对其进行解码的场景。它的工作原理如下:

$jsonString = &#39;{"姓名": "小明", "年龄": 20}&#39;;
$isJsonValid = json_validate($jsonString);

该函数简化了 JSON 验证,使其更加高效和简单。

Randomizer 增强

PHP 8.3 对 PHP 8.2 中引入的 Randomizer 类进行了增强,新增了从字符串生成随机字节以及获取指定范围内的随机浮点数的方法。例如:

$randomizer = new Randomizer();
$randomBytes = $randomizer->getBytesFromString(&#39;abcdef&#39;, 4);
$randomFloat = $randomizer->getFloat(0.0, 1.0);

新方法扩展了 Randomizer 类的功能,使其能够生成更丰富、更灵活的随机数据。

动态类常量获取

PHP 8.3 新增了动态获取类常量的语法,使代码在使用常量时更加灵活、易读。例如:

class Setting {
  const MODE = &#39;产生&#39;;
  public static function getCurrentMode() {
    return static::MODE;
  }
}
$currentMode = Setting::getCurrentMode();

这种语法简化了动态访问类常量的过程,增强了代码的可读性和可维护性。

更具针对性的日期/时间异常

PHP 8.3 对日期和时间函数的异常处理进行了改进,新增了针对特定错误情况的专用异常。此改进使错误报告更加描述性和准确,从而提高了调试和处理日期/时间相关问题的效率。

优化了 unserialize() 错误处理

PHP 8.3 中的 unserialize() 函数在遇到问题时始终抛出 E_WARNING 错误,从而提供更统一和可预测的错误处理。此更改简化了序列化场景中的调试和错误处理。

range() 関数の改善

PHP 8.3 では、無効な境界入力に対する TypeError 例外のスローなど、range() 関数に多くの改善が加えられました。無効なステップ値に対して ValueError 例外をスローします。これらの改善により、関数の動作がより直感的で一貫性のあるものになりました。

特性と静的プロパティ

PHP 8.3 では、静的プロパティを持つ特性を使用すると、親クラスから継承された静的プロパティが再宣言され、現在のクラス用に別の静的プロパティ ストアが作成されます。この変更により、トレイト内の静的プロパティの動作がクラス内の静的プロパティの動作と一致します。

スタック オーバーフロー検出

PHP 8.3 では、セグメンテーション フォールトを防ぐためにスタック オーバーフローを検出するための新しい INI ディレクティブが追加されています。この機能は、特に複雑なシナリオや再帰的なシナリオにおいて、PHP アプリケーションの安定性と信頼性を強化します。

新しい関数 mb_str_pad

PHP 8.3 の新しい mb_str_pad() 関数は、UTF-8 などのマルチバイトを処理するために、マルチバイト文字列関数のギャップを埋めます。エンコードは非常に重要です。この関数により、エンコーディングに関係なく文字列が正しく入力されることが保証されます。

マジック メソッド クロージャと名前付きパラメータ

PHP 8.3 では、マジック メソッドからクロージャを作成し、これらのクロージャに名前付きパラメータを渡すことができるため、マジック メソッドの柔軟性と表現力が強化され、より強力で多用途なものになります。

不変の定数可視性

PHP 8.3 では、インターフェイスの実装時の定数可視性チェックのバグが修正されています。この変更により、PHP の可視性の一般原則と一致して、定数の一貫した可視性が保証されます。

非推奨

いつものように、PHP 8.3 には、古い機能や効率性の低い機能を段階的に廃止し、言語を前進させるために多数の非推奨が含まれています。これらの非推奨には、mb_strimwidth()ldap_connect() などの関数への変更が含まれます。

PHP 8.3 のリリースは、PHP 言語の継続的な開発と改善におけるもう 1 つのマイルストーンです。新機能、機能拡張、および非推奨により、開発者はより効率的で堅牢で保守しやすいコードを作成するためのより多くのツールと機能が提供されます。これらの変更を検討して採用する際には、アプリケーションを徹底的にテストし、PHP エコシステムの最新の開発情報を常に入手してください。

以上がPHP 8.3 ビッグ リリース: 革新と強化、未来を創造するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。