PHP 7.4는 2019년 12월에 출시될 예정입니다. 이 페이지는 정기적으로 업데이트됩니다.
<strong>미리 로드 중</strong>
<strong>미리 로드 중</strong> rfc<strong>Preloading</strong>
预加载 rfc
Preloading
(预加载)是对PHP核心的一个惊人的补充,它可以带来一些主要的性能改进。
简而言之:如果你今天使用的是框架,那么它的文件必须在每次请求时加载和重新编译。预加载允许服务器在启动时在内存中加载PHP文件,并使它们对所有后续请求永久可用。
性能的提高当然是有代价的:如果预加载文件的来源发生变化,则必须重新启动服务器。
<strong>Typed properties</strong>
rfc
类变量可以是类型提示:
class A { public string $name; public Foo $foo; }
更新:到目前为止,已合并了Typed properties,从而为PHP 7.4确认了这些属性。
<strong>Improved type variance</strong>
(改进的类型差异) rfc
我以前写过关于PHP类型系统的文章,所以很高兴看到PHP内核中出现了一些改进。
类型差异是一个值得自己发表博文的主题;
简而言之:你将能够使用covariant
返回类型
class ParentType {} class ChildType extends ParentType {} class A { public function covariantReturnTypes(): ParentType { /* … */ } } class B extends A { public function covariantReturnTypes(): ChildType { /* … */ } }
和contravariant
参数。
class A { public function contraVariantArguments(ChildType $type) { /* … */ } } class B extends A { public function contraVariantArguments(ParentType $type) { /* … */ } }
更新:RFC目前处于投票阶段,但看起来它会毫无问题地通过。
<strong>Foreign Function Interface</strong>
(外部函数接口) rfc
外部函数接口,简称FFI,允许从用户域调用C代码。这意味着PHP扩展可以用纯PHP编写。
值得注意的是,这是一个复杂的话题。你仍然需要C知识才能正确地使用这个特性。
<strong>Null</strong>
合并赋值操作符 rfc
不是这样做:
$data['date'] = $data['date'] ?? new DateTime();
你可以这样做:
$data['date'] ??= new DateTime();
更新:这个特性现在合并到PHP 7.4中。
自定义对象序列化 rfc
这个RFC添加了两个新的魔术方法:__serialize
和__unserialize
。在RFC中讨论了这些方法与__sleep
和__wakeup
方法的区别。
更新:RFC通过。这个特性将在PHP 7.4中添加。
<strong>No more narrow margins</strong>
rfc
从技术上讲,这并不是一个与PHP 7.4相关的更新,但它确实值得一提。RFC的投票规则已经改变:他们总是需要2/3的多数才能通过。
<strong>Reflection for references</strong>
rfc
像Symfony的var转储程序这样的库很大程度上依赖于反射API来可靠地转储变量。以前,没有对引用的适当反射支持,导致这些库依赖hack来检测引用。
PHP 7.4添加了ReflectionReference
类,解决了这个问题。
更新:RFC已通过,PHP 7.4已确认更改。
添加mb_str_split
rfc
这个函数提供了与str_split相同的功能,但是是在多字节字符串上。
始终启用ext-hash
rfc
正如标题所说,这个扩展现在在所有PHP安装中都是永久可用的。
默认情况下不启用PEAR
由于PEAR不再积极维护,核心团队决定用PHP 7.4删除其默认安装。
密码哈希(Hashing
)注册表 rfc
内部更改哈希库的使用方式,以便用户更容易地使用它们。
弃用<strong>ext / wwdx</strong>
rfc
这种数据交换格式从来没有标准化过,现在它的扩展被废弃了。
向后不兼容的变更升级
在升级PHP版本时,应该始终查看完整的升级文档。
以下是突出显示的一些向后不兼容的更改:
• parent::
사전 로드
(사전 로드)는 몇 가지 주요 성능 향상을 가져오는 놀라운 PHP 코어 추가 기능입니다. #🎜🎜##🎜🎜# 간단히 말해서, 현재 프레임워크를 사용하고 있다면 요청이 있을 때마다 해당 파일을 로드하고 다시 컴파일해야 합니다. 사전 로드를 사용하면 서버가 시작 시 메모리에 PHP 파일을 로드하고 이후의 모든 요청에 영구적으로 사용할 수 있도록 할 수 있습니다. #🎜🎜##🎜🎜# 성능 향상에는 비용이 따릅니다. 미리 로드된 파일의 소스가 변경되면 서버를 다시 시작해야 합니다. #🎜🎜##🎜🎜#<strong>유형화된 속성</strong>
rfc #🎜🎜##🎜🎜# 클래스 변수는 유형 힌트를 사용할 수 있습니다: #🎜🎜#rrreee#🎜🎜# 업데이트: 유형이 지정된 속성이 지금까지 병합되어 PHP 7.4에 대해 확인되었습니다. #🎜🎜##🎜🎜#<strong>향상된 유형 변화</strong>
(향상된 유형 변화) rfc#🎜🎜##🎜🎜#PHP 유형 시스템에 대해 이전에 작성한 적이 있으므로 일부 내용을 보니 반갑습니다. PHP 코어에 개선 사항이 나타났습니다. #🎜🎜##🎜🎜#유형 차이는 자체 블로그 게시물에 올릴 만한 주제입니다.#🎜🎜##🎜🎜#간단히 말하면 공변
반환 유형을 사용할 수 있습니다#🎜 🎜# rrreee#🎜🎜# 및 반공변
매개변수. #🎜🎜#rrreee#🎜🎜#업데이트: RFC는 현재 투표 단계이지만 문제 없이 통과될 것으로 보입니다. #🎜🎜##🎜🎜#<strong>외부 함수 인터페이스</strong>
(외부 함수 인터페이스) rfc#🎜🎜##🎜🎜#Foreign Function Interface(FFI)를 사용하면 사용자 도메인에서 C 코드를 호출할 수 있습니다. 이는 PHP 확장이 순수 PHP로 작성될 수 있음을 의미합니다. #🎜🎜##🎜🎜#이것이 복잡한 주제라는 점은 주목할 가치가 있습니다. 이 기능을 올바르게 사용하려면 여전히 C 지식이 필요합니다. #🎜🎜##🎜🎜#<strong>Null</strong>
병합 할당 연산자 rfc#🎜🎜##🎜🎜# 다음을 수행하는 대신: #🎜🎜#rrreee#🎜🎜#다음을 수행할 수 있습니다: #🎜🎜#rrreee#🎜🎜#Update :이 기능은 이제 PHP 7.4에 병합되었습니다. #🎜🎜##🎜🎜#사용자 정의 객체 직렬화 rfc #🎜 🎜##🎜🎜#이 RFC에는 __serialize
및 __unserialize
라는 두 가지 새로운 매직 메서드가 추가되었습니다. 이러한 메서드와 __sleep
및 __wakeup
메서드 간의 차이점은 RFC에 설명되어 있습니다. #🎜🎜##🎜🎜#업데이트: RFC가 통과되었습니다. 이 기능은 PHP 7.4에 추가될 예정입니다. #🎜🎜##🎜🎜#<strong>더 이상 좁은 여백 없음</strong>
rfc#🎜🎜##🎜🎜#기술적으로 말하면, 이것은 PHP 7.4와 관련된 업데이트는 아니지만 확실히 언급할 가치가 있습니다. RFC에 대한 투표 규칙이 변경되었습니다. 통과하려면 항상 2/3의 과반수가 필요합니다. #🎜🎜##🎜🎜#<strong>참조 반영</strong>
rfc#🎜🎜##🎜🎜#Symfony의 var dumper와 같은 라이브러리는 변수를 안정적으로 덤프하기 위해 리플렉션 API에 크게 의존합니다. 이전에는 참조에 대한 적절한 리플렉션 지원이 없었기 때문에 이러한 라이브러리는 참조를 감지하기 위해 해킹에 의존했습니다. #🎜🎜##🎜🎜#PHP 7.4에서는 이 문제를 해결하기 위해 ReflectionReference
클래스가 추가되었습니다. #🎜🎜##🎜🎜#업데이트: RFC 통과, PHP 7.4에 대한 변경 사항 확인. #🎜🎜##🎜🎜#mb_str_split
rfc 추가 #🎜🎜##🎜🎜#이 함수는 str_split과 동일한 기능을 제공하지만 멀티바이트 문자열에 적용됩니다. #🎜🎜##🎜🎜#항상 ext-hash
활성화 rfc#🎜🎜##🎜🎜# 제목에서 알 수 있듯이 이 확장은 이제 모든 PHP 설치에서 영구적으로 사용할 수 있습니다. #🎜🎜##🎜🎜#PEAR
은 기본적으로 활성화되어 있지 않습니다. #🎜🎜##🎜🎜# PEAR는 더 이상 적극적으로 유지 관리되지 않으므로 핵심 팀은 제거하기로 결정했습니다. PHP 7.4와 함께 기본적으로 설치됩니다. #🎜🎜##🎜🎜#비밀번호 해싱(Hashing
) 레지스트리 rfc#🎜🎜##🎜🎜# 사용자가 더 쉽게 사용할 수 있도록 해시 라이브러리를 사용하는 방법이 내부적으로 변경되었습니다. #🎜🎜##🎜🎜#지원 중단됨<strong>ext / wwdx</strong>
rfc#🎜🎜##🎜🎜#이 데이터 교환 형식은 표준화된 적이 없으며 해당 확장은 이제 더 이상 사용되지 않습니다. #🎜🎜##🎜🎜#이전 버전과 호환되지 않는 변경 사항 업그레이드#🎜🎜##🎜🎜#PHP 버전을 업그레이드할 때 항상 업그레이드 문서 전체. #🎜🎜##🎜🎜#다음은 이전 버전과 호환되지 않는 변경 사항 중 일부입니다. #🎜🎜##🎜🎜# • parent::
부모 없이 클래스에서 참조하면 A 컴파일이 생성됩니다. 런타임 오류가 아닌 시간 오류입니다. #🎜🎜#• DateTime
또는 datetimevariable
인스턴스에서 var_dump를 호출하면 더 이상 개체에 액세스 가능한 속성이 남지 않습니다. DateTime
或datetimevariable
实例上调用var_dump将不再在对象上留下可访问的属性。
• openssl_random_pseudo_bytes
将在错误情况下抛出异常。
• 试图序列化PDO
或PDOStatement
实例将生成异常,而不是PDOException
。
• 在ArrayObject
实例上调用get_object_vars()
将返回ArrayObject
openssl_random_pseudo_bytes
는 오류 상황에서 예외를 발생시킵니다. • PDO
또는 PDOStatement
인스턴스를 직렬화하려고 하면 PDOException
대신 예외가 생성됩니다. • ArrayObject
인스턴스에서 get_object_vars()
를 호출하면 래핑된 배열이나 객체의 값이 아닌 ArrayObject
자체의 속성이 반환됩니다. . (배열) 캐스트는 영향을 받지 않습니다. 번역 출처: https://stitcher.io/blog/new-in-php-74#reflection-for-references-rfc
관련 추천:
《PHP7의 추상 구문 트리(AST)가 가져온 변화
》🎜🎜 《🎜PHP7 언어의 실행 원리(PHP7 소스 코드 분석)🎜》🎜