>  기사  >  백엔드 개발  >  php7의 새로운 기능 요약

php7의 새로운 기능 요약

不言
不言원래의
2018-08-29 10:41:412523검색

이 기사는 php7의 새로운 기능에 대한 요약을 제공합니다. 이는 특정 참조 가치가 있습니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

PHP7이 출시된 지 거의 3년이 되어 이제 PHP7.2.9 버전으로 개발되었습니다. 이번 출시로 PHP의 성능이 크게 향상되었습니다. 이는 주로 Zend 엔진에 대한 PHP의 심층적인 최적화에 힘입은 동시에 시스템에서 PHP의 리소스 사용량도 감소했기 때문입니다.

주요 변경 사항은 다음과 같습니다.

  • 추상 구문 트리

이전 버전의 PHP에서는 구문 분석 단계에서 PHP 코드가 직접 ZendVM 명령을 생성했습니다. opline 지시문은 컴파일러를 실행 프로그램에 연결하는 zend_언어_parser.y에서 직접 생성됩니다. ZendVM 指令,也就是在 zend_language_parser.y 中直接生成 opline 指令,这使得编译器与执行器耦合在一起。

PHP7 中增加了抽象语法树,首先是将PHP代码解析生成抽象语法树,然后将抽象语法树编译为 ZendVM 指令。抽象语法树的加入使得 PHP 的编译器与执行器很好地隔离开,编译器不需要关心指令的生成规则,然后执行器根据自己的规则将抽象语法树编译为对应的指令,执行器同样不需要关心该指令的语法规则是什么样子的。

  • Native TLS

PHP7 中使用 Native TLS(线程局部存储)来保存线程的资源池,简单地讲就是通过 __thread 标识一个全局变量,这样这个全局变量就是线程独享的了,不同线程的修改不会相互影响。

  • 指定函数参数、返回值类型

PHP7中可以指定函数参数及返回值的类型。

  • zval 结构的变化

PHP7 将引用计数转移到了具体的 value 中,这样更合理。除此之外,zval 结构的大小也从 24byte 少到了 16byte,这是 PHP7 能够降低系统资源占用的一个优化点所在。

  • 异常处理

PHP5.x 中很多操作会直接抛出 error 错误,PHP7 中将多数错误改为了异常抛出,这样一来就可以通过 try catch 捕捉到。

  • HashTable 的变化

PHP7 中 HashTable 有非常大的变化,HashTable 结构的大小从 72byte 减小到了 56byte,同时,数组元素 Bucket 结构也从 72byte 减小到了 32byte。

  • 执行器

在 PHP7 中不再采用传参的方式,而是将 execute_dataopline 通过寄存器来进行存储,避免了传参导致的频繁出入栈操作,同时,寄存器相比内存的访问速度更快。

  • 新的参数解析方式

PHP5.x 通过 zend_parse_parameters()

추상 구문 트리가 PHP7에 추가되었습니다. 먼저 PHP 코드를 구문 분석하여 추상 구문 트리를 생성한 다음 추상 구문 트리를 ZendVM 명령으로 컴파일합니다. 추상 구문 트리를 추가하면 PHP 컴파일러와 실행기가 잘 분리됩니다. 컴파일러는 명령어 생성 규칙에 신경 쓸 필요가 없습니다. 그런 다음 실행기는 자체 규칙에 따라 추상 구문 트리를 해당 명령어로 컴파일합니다. 그렇지 않습니다. 이 명령어의 구문 규칙이 어떻게 생겼는지 주의해야 합니다.

Native TLS

PHP7은 스레드의 리소스 풀을 저장하기 위해 Native TLS(스레드 로컬 저장소)를 사용합니다. 간단히 말하면 __thread를 통해 전역을 식별하는 것입니다. > 변수이므로 이 전역 변수는 스레드에만 적용되며 다른 스레드의 수정 사항은 서로 영향을 미치지 않습니다.

함수 매개변수 및 반환값 유형 지정

🎜🎜PHP7에서는 함수 매개변수 유형 및 반환값을 지정할 수 있습니다. 🎜🎜🎜🎜zval 구조 변경🎜🎜🎜🎜PHP7에서는 참조 카운팅을 보다 합리적인 특정 으로 이동했습니다. 또한 zval 구조의 크기도 24바이트에서 16바이트로 줄었습니다. 이는 PHP7이 시스템 리소스 사용량을 줄일 수 있는 최적화 지점입니다. 🎜🎜🎜🎜예외 처리🎜🎜🎜🎜PHP5에서는 많은 작업이 이루어집니다. 🎜🎜🎜🎜HashTable 변경🎜🎜🎜🎜PHP7에서는 HashTable에 매우 큰 변화가 있습니다. HashTable 구조의 크기가 72바이트에서 56바이트로 줄었습니다. 동시에 배열 요소Bucket 구조도 72바이트에서 32바이트로 줄었습니다. 🎜🎜🎜🎜Executor🎜🎜🎜🎜는 더 이상 PHP7에서 전달되는 매개변수를 사용하지 않습니다. 대신 execute_dataopline이 레지스터에 저장되므로 빈번한 스택을 전달할 필요가 없습니다. 매개변수로 인한 작업과 동시에 레지스터 액세스 속도는 메모리보다 빠릅니다. 🎜🎜🎜🎜새로운 매개변수 구문 분석 방법🎜🎜🎜🎜PHP5.x는 함수 매개변수를 구문 분석하기 위해 zend_parse_parameters()를 사용합니다. PHP7은 원래 방법을 유지하면서 다른 방법을 제공하지만 새로운 구문 분석 방법이 더 빠릅니다. 🎜🎜관련 권장 사항: 🎜🎜🎜PHP7 새로운 기능 소개🎜🎜🎜🎜🎜PHP7 새로운 기능 소개🎜🎜🎜🎜🎜

위 내용은 php7의 새로운 기능 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.