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'; }
이 기능은 클래스 상수의 견고성을 향상시켜 클래스 계약의 필수 부분으로 만듭니다.
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); // ['first', 'second'] 在 PHP < 8.3 中,['first', 'second'] 在 PHP 8.3 中
这一变化使得负指数的处理更加可预测和一致。
PHP 8.3 引入了对匿名类标记为只读的支持,这为动态创建不可变对象提供了更大的灵活性。例如:
$anonymousClass = new readonly class { public function __construct( public string $name = 'Anonymous', ) {} };
此增强功能使只读类在各种编程场景中更加通用,扩大了其应用范围。
PHP 8.3 新增的 json_validate()
函数提供了一种节省内存的方法来检查字符串是否为有效的 JSON。此函数特别适用于需要验证 JSON 而不对其进行解码的场景。它的工作原理如下:
$jsonString = '{"姓名": "小明", "年龄": 20}'; $isJsonValid = json_validate($jsonString);
该函数简化了 JSON 验证,使其更加高效和简单。
PHP 8.3 对 PHP 8.2 中引入的 Randomizer
类进行了增强,新增了从字符串生成随机字节以及获取指定范围内的随机浮点数的方法。例如:
$randomizer = new Randomizer(); $randomBytes = $randomizer->getBytesFromString('abcdef', 4); $randomFloat = $randomizer->getFloat(0.0, 1.0);
新方法扩展了 Randomizer
类的功能,使其能够生成更丰富、更灵活的随机数据。
PHP 8.3 新增了动态获取类常量的语法,使代码在使用常量时更加灵活、易读。例如:
class Setting { const MODE = '产生'; public static function getCurrentMode() { return static::MODE; } } $currentMode = Setting::getCurrentMode();
这种语法简化了动态访问类常量的过程,增强了代码的可读性和可维护性。
PHP 8.3 对日期和时间函数的异常处理进行了改进,新增了针对特定错误情况的专用异常。此改进使错误报告更加描述性和准确,从而提高了调试和处理日期/时间相关问题的效率。
PHP 8.3 中的 unserialize()
函数在遇到问题时始终抛出 E_WARNING
错误,从而提供更统一和可预测的错误处理。此更改简化了序列化场景中的调试和错误处理。
PHP 8.3 range() 함수는 잘못된 경계 입력 2px에 대해 TypeError code> 예외가 발생하고 잘못된 단계 값 <code style="margin: 0px 2px; padding: 2px 6px; outlook: 0px; max-width: 100%; box-sizing: border-box ! important; Overflow-wrap: break-word !important; 글꼴 계열: " operator mono consolas monaco menlo rgba>ValueError
예외입니다. 이러한 개선으로 인해 함수의 동작이 더욱 직관적이고 일관되게 이루어졌습니다. range()
函数进行了多项改进,包括针对无效边界输入抛出 TypeError
异常,以及针对无效步长值抛出 ValueError
异常。这些改进使函数的行为更加直观和一致。
PHP 8.3 中,使用具有静态属性的特征将重新声明从父类继承的静态属性,为当前类创建单独的静态属性存储。此更改使特征中静态属性的行为与类中静态属性的行为一致。
PHP 8.3 添加了新的 INI 指令来检测堆栈溢出,从而防止分段错误。此功能增强了 PHP 应用程序的稳定性和可靠性,尤其是在复杂或递归场景中。
PHP 8.3 新增的 mb_str_pad()
mb_str_pad()
이 함수는 멀티바이트 문자열 함수의 공백을 메우며 UTF와 같은 멀티바이트 인코딩 처리에 적합합니다. -8 결정적. 이 함수는 인코딩에 관계없이 문자열이 올바르게 채워지도록 보장합니다. 🎜PHP 8.3은 매직 메소드에서 클로저를 생성하고 명명된 매개변수를 이러한 클로저에 전달하여 매직 메소드의 유연성과 표현력을 향상시켜 더욱 강력하고 다양하게 만듭니다.
PHP 8.3에서는 인터페이스 구현 시 지속적인 가시성 검사 버그를 수정했습니다. 이러한 변경으로 인해 PHP의 일반적인 가시성 원칙에 따라 상수의 일관된 가시성이 보장됩니다.
언제나 그렇듯이 PHP 8.3에는 오래되었거나 덜 효율적인 기능을 단계적으로 제거하고 언어를 발전시키기 위한 여러 가지 지원 중단이 포함되어 있습니다. 이러한 지원 중단에는 mb_strimwidth()
和 ldap_connect()
과 같은 기능에 대한 변경 사항이 포함됩니다.
PHP 8.3의 출시는 PHP 언어의 지속적인 개발과 개선에 있어 또 하나의 이정표입니다. 새로운 기능, 개선 사항 및 지원 중단을 통해 개발자는 더욱 효율적이고 강력하며 유지 관리 가능한 코드를 작성할 수 있는 더 많은 도구와 기능을 제공합니다. 이러한 변경 사항을 탐색하고 채택할 때 애플리케이션을 철저하게 테스트하고 PHP 생태계의 최신 개발 정보를 받아보세요.
위 내용은 PHP 8.3 대규모 릴리스: 혁신과 향상, 미래 창조의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!