백엔드 개발 PHP7 php7의 주요 새로운 기능을 살펴 보겠습니다.

php7의 주요 새로운 기능을 살펴 보겠습니다.

Jun 28, 2020 pm 04:26 PM
php7 새로운 특성


php7의 주요 새로운 기능을 살펴 보겠습니다.

지금까지 PHP는 php7의 RC5 버전을 공식 출시했습니다. 이제 php7의 주요 기능은 확실히 마무리되었으며 더 이상 변경 사항은 없습니다. 일부 후속 버전의 반복은 주로 버그 수정, 최적화 등입니다. 우리가 기대하고 있는 php7의 주요 변경 사항에 대해 이야기해 보겠습니다.

새로운 기능 미리보기

ZEND引擎升级到Zend Engine 3,也就是所谓的PHP NG
增加抽象语法树,使编译更加科学
64位的INT支持
统一的变量语法
原声的TLS - 对扩展开发有意义
一致性foreach循环的改进
新增 <=>、**、?? 、\u{xxxx}操作符
增加了返回类型的声明
增加了标量类型的声明
核心错误可以通过异常捕获了
增加了上下文敏感的词法分析
로그인 후 복사

관련 학습 권장 사항: PHP 초보자부터 마스터까지 프로그래밍

1. 일부 이전 확장을 제거하고 이를 PECL로 마이그레이션했습니다(예: mysql)3.< ;? 언어="php"가 제거되었습니다4. 16진수 문자열 변환이 폐지되었습니다

//PHP5
"0x10" == "16"

//PHP7
"0x10" != "16"
로그인 후 복사

5.HTTP_RAW_POST_DATA가 제거되었습니다(대신 php://input을 사용할 수 있습니다)

6. 정적 함수는 더 이상 호출을 지원하지 않습니다. 호환되지 않는 $this
$o = & new className{}을 통한 비정적 함수, 이 쓰기 방법은 더 이상 지원되지 않습니다

7.php.ini 파일이 #을 주석으로 제거했습니다. 주석으로 사용하려면


일부; 동작 변경

더 이상 같은 이름을 가진 함수 정의 매개변수를 지원하지 않습니다.

유형에 대해 같은 이름을 가진 생성자는 더 이상 권장되지 않습니다(현재는 제거되지 않으며 나중에 제거될 예정입니다) String, int, float 이 키워드는 더 이상 사용할 수 없습니다. 클래스 이름으로func_get_args()는 현재 변수의 값을 얻습니다

function test ($num) {
  $num++;
  var_dump(func_get_args()[0]);
};

test(1)

//PHP5
int(1)

//PHP7
int(2)
로그인 후 복사

다음은 PHPer가 소개할 몇 가지 기본, 핵심 및 중요한 기능을 선택했습니다


PHP NG


새로운 PHP 엔진은 많은 것을 최적화했습니다 장소, 그리고 바로 이 때문에 php7의 성능이 php5에 비해 거의 두 배나 향상되었습니다!

ZVAL 구조 재구성


왼쪽이 PHP5의 zval(24바이트), 오른쪽이 PHP7의 zval(16바이트)입니다.

php7의 zval을 알 수 있습니다. php5보다 더 복잡하지만 24바이트에서 16바이트로 줄어들 수 있습니다.

C 언어에서 구조체의 각 멤버 변수는 독립적인 메모리 공간을 차지하는 반면, Union의 멤버 변수는 메모리 공간을 공유합니다(Union은 php7에서 구조체를 대체하는 데 널리 사용됩니다). 따라서 멤버 변수가 훨씬 많아진 것처럼 보이지만, 그 중 대부분이 Public인 메모리가 차지하는 실제 메모리 공간은 줄어들었습니다.

새로운 Zend 배열을 사용하여 이전 HashTale 구조 대체


우리 PHP 프로그램에서 가장 많이 사용되고, 가장 유용하고, 가장 편리하고 유연한 것은 배열이며, php5의 하위 레이어는 HashTable로 구현됩니다. , php7에서 사용되는 새로운 Zend Array 유형으로 성능과 액세스 속도가 크게 향상되었습니다! 매우 일반적으로 사용되는 저비용 함수 중 일부는 엔진에서 지원하는 opcode가 됩니다.

call_user_function(_array) => ZEND_INIT_USER_CALL
is_int/string/array/* => ZEND_TYPE_CHECK
strlen => ZEND_STRLEN
defined => ZEND+DEFINED
로그인 후 복사

새로운 메모리 할당 및 관리 방법을 사용하여 메모리 낭비를 줄입니다.

코어 정렬 최적화 zend_sort

//PHP5 - 快速排序(非稳定排序)
array(1 => 0, 0 => 0)

//PHP7 - 快速排序+选择排序(稳定排序)
array(0 => 0, 1 => 0)
로그인 후 복사

16개 미만 요소 선택 정렬을 사용하여 16개 단위로 16개보다 큰 항목은 각각 선택 정렬을 사용한 후 모두 결합하여 빠른 정렬을 사용합니다. 이전 정렬과 비교하여 내부 요소가 비안정 정렬에서 안정 정렬로 변경되어 요소 교환 횟수와 메모리 연산 횟수가 감소하고 성능이 40% 향상되었습니다.

Abstract Syntax Tree



If 이제 그러한 필요성이 생겼으므로 PHP 소스 파일에서 구문 감지를 수행하고 코딩 표준을 구현해야 합니다. php5 이전에는 AST가 없었고 opcode는 파서에서 직접 생성되었습니다! 이를 달성하려면 외부 PHP 구문 분석기를 사용해야 하며 php7은 AST를 추가합니다. 이러한 확장을 직접 구현할 수 있으며 확장에서 제공하는 기능을 사용하여 파일에 해당하는 AST 구조를 직접 얻을 수 있습니다. 우리는 이를 식별할 수 있으므로 이를 기반으로 일부 최적화 및 판단을 수행할 수 있습니다.

64비트 INT 지원


2GB보다 큰 문자열 저장 지원

2GB보다 큰 파일 업로드 지원모든 플랫폼에서 문자열이 64비트임을 보장[64비트]균일한 구문 변수

$$foo[&#39;bar&#39;][&#39;baz&#39;]

//PHP5
($$foo)[‘bar&#39;][&#39;baz&#39;]

//PHP7: 遵循从左到右的原则
${$foo[‘bar&#39;][&#39;baz&#39;]}
로그인 후 복사


foreach의 개선 사항 loop

//PHP5
$a = array(1, 2, 3);foreach ($a as $v){var_dump(current($a));}
int(2)
int(2)
int(2)

$a = array(1, 2, 3);$b=&$a;foreach ($a as $v){var_dump(current($a));}
int(2)
int(3)
bool(false)

$a = array(1, 2, 3);$b=$a;foreach ($a as $v){var_dump(current($a));}
int(1)
int(1)
int(1)

//PHP7:不再操作数据的内部指针了
$a = array(1, 2, 3);foreach ($a as $v){var_dump(current($a))}
int(1)
int(1)
int(1)

$a = array(1, 2, 3);$b=&$a;foreach ($a as $v){var_dump(current($a))
int(1)
int(1)
int(1)

$a = array(1, 2, 3);$b=$a;foreach ($a as $v){var_dump(current($a))}
int(1)
int(1)
int(1)
로그인 후 복사

여러 가지 새로운 연산자

//<=> - 比较两个数的大小【-1:前者小于后者,0:前者等于后者,1:前者大于后者】
echo 1 <=> 2;//-1
echo 1 <=> 1;//0
echo 1 <=> 0;//1

// ** - 【a的b次方】
echo 2 ** 3;//8

//?? - 三元运算符的改进
//php5
$_GET[&#39;name&#39;] ? $_GET[&#39;name&#39;] : &#39;&#39;;//Notice: Undefined index: …
//php7
$_GET[&#39;name&#39;] ?? &#39;&#39; -> &#39;&#39;;

//\u{xxxx} - Unicode字符的解析
echo "\u{4f60}";//你
echo "\u{65b0}";//新
로그인 후 복사
반환 유형 선언
function getInt() : int {
  return “test”;
};

getInt();

//PHP5
#PHP Parse error: parse error, expecting &#39;{&#39;...

//PHP7
#Fatal error:Uncaught TypeError: Return value of getInt() must be of the type integer, string returned
로그인 후 복사

스칼라 유형 선언

function getInt(int $num) : int {
  return $num;
};

getInt(“test”);

//PHP5
#PHP Catchable fatal error: Argument 1 passed to getInt() must be an instance of int, string given…

//PHP7
#Fatal error: Uncaught TypeError: Argument 1 passed to getInt() must be of the type integer, string given…
로그인 후 복사

핵심 오류는 예외를 통해 포착 가능

try {
  non_exists_func();
} catch(EngineException $e) {
  echo “Exception: {$e->getMessage();}\n”;
}

//这里用php7试了一下还是没法捕获,但是看鸟哥介绍说是可行的。。。
#Exception: Call to undefined function non_exists_func()
로그인 후 복사

민감한 어휘 분석

//PHP5
class Collection {public function foreach($arr) {}}
#Parse error: parse error, expecting `"identifier (T_STRING)”&#39;...

//PHP7
class Collection {
  public function foreach($arr) {}
  public function in($arr){}
  public function where($condition){}
  public function order($condition){}
}
$collection = new Collection();
$collection->where()->in()->foreach()->order();
로그인 후 복사
이제 기본적으로 완료되었습니다. php7에 대한 예비적인 이해입니다. 잘못된 부분과 낮은 수준의 실수가 많이 있을 것입니다. 제가 수정하고 메모할 수 있도록 제때에 수정해 주시기 바랍니다. 헤이-헤이!

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

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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

php7.0에 플러그인이 설치되어 있는데 여전히 설치되지 않은 것으로 표시되면 어떻게 해야 합니까? php7.0에 플러그인이 설치되어 있는데 여전히 설치되지 않은 것으로 표시되면 어떻게 해야 합니까? Apr 02, 2024 pm 07:39 PM

PHP 7.0에서 설치된 플러그인이 표시되지 않는 문제를 해결하려면: 플러그인 구성을 확인하고 플러그인을 활성화하세요. 구성 변경 사항을 적용하려면 PHP를 다시 시작하세요. 플러그인 파일 권한이 올바른지 확인하세요. 플러그인이 올바르게 작동하도록 하려면 누락된 종속성을 설치하세요. 다른 모든 단계가 실패하면 PHP를 다시 빌드하세요. 다른 가능한 원인으로는 호환되지 않는 플러그인 버전, 잘못된 버전 로드 또는 PHP 구성 문제 등이 있습니다.

PHP 8.3 출시: 새로운 기능 한눈에 보기 PHP 8.3 출시: 새로운 기능 한눈에 보기 Nov 27, 2023 pm 12:52 PM

PHP8.3 출시: 새로운 기능 개요 기술이 계속 발전하고 변화가 필요함에 따라 프로그래밍 언어는 지속적으로 업데이트되고 개선됩니다. 웹 개발에 널리 사용되는 스크립팅 언어인 PHP는 개발자에게 더욱 강력하고 효율적인 도구를 제공하기 위해 지속적으로 개선되어 왔습니다. 최근 출시된 PHP 8.3 버전에는 오랫동안 기다려온 많은 새로운 기능과 개선 사항이 포함되어 있습니다. 이러한 새로운 기능에 대한 개요를 살펴보겠습니다. null이 아닌 속성의 초기화 이전 버전의 PHP에서는 클래스 속성에 명시적으로 값이 할당되지 않은 경우 해당 값은

PHP8의 새로운 기능을 배우고 최신 기술에 대한 심층적인 이해를 얻을 수 있는 가이드 PHP8의 새로운 기능을 배우고 최신 기술에 대한 심층적인 이해를 얻을 수 있는 가이드 Dec 23, 2023 pm 01:16 PM

최신 기술을 익히는 데 도움이 되는 PHP8의 새로운 기능에 대한 심층 분석입니다. 시간이 지남에 따라 PHP 프로그래밍 언어는 지속적으로 발전하고 개선되었습니다. 최근 출시된 PHP8 버전은 개발자에게 많은 흥미로운 새로운 기능과 개선 사항을 제공하여 개발 작업에 더 많은 편의성과 효율성을 제공합니다. 이 기사에서는 PHP8의 새로운 기능을 심층적으로 분석하고 이러한 최신 기술을 더 잘 익히는 데 도움이 되는 특정 코드 예제를 제공합니다. JIT 컴파일러 PHP8에는 JIT(Just-In-Time) 컴파일이 도입되었습니다.

PHP 서버 환경 FAQ 가이드: 일반적인 문제를 신속하게 해결 PHP 서버 환경 FAQ 가이드: 일반적인 문제를 신속하게 해결 Apr 09, 2024 pm 01:33 PM

PHP 서버 환경에 대한 일반적인 솔루션에는 올바른 PHP 버전이 설치되어 있는지, 관련 파일이 모듈 디렉터리에 복사되었는지 확인하는 것이 포함됩니다. SELinux를 일시적으로 또는 영구적으로 비활성화합니다. 필요한 확장이 추가되고 올바르게 설정되었는지 확인하려면 PHP.ini를 확인하고 구성하십시오. PHP-FPM 서비스를 시작하거나 다시 시작합니다. 해결 문제에 대해서는 DNS 설정을 확인하세요.

시스템 재시작 후 UnixSocket의 권한을 자동으로 설정하는 방법은 무엇입니까? 시스템 재시작 후 UnixSocket의 권한을 자동으로 설정하는 방법은 무엇입니까? Mar 31, 2025 pm 11:54 PM

시스템이 다시 시작된 후 UnixSocket의 권한을 자동으로 설정하는 방법. 시스템이 다시 시작될 때마다 UnixSocket의 권한을 수정하려면 다음 명령을 실행해야합니다.

Docker 환경에서 PECL을 사용하여 확장자를 설치할 때 오류가 발생하는 이유는 무엇입니까? 그것을 해결하는 방법? Docker 환경에서 PECL을 사용하여 확장자를 설치할 때 오류가 발생하는 이유는 무엇입니까? 그것을 해결하는 방법? Apr 01, 2025 pm 03:06 PM

Docker 환경을 사용할 때 Docker 환경에 Extensions를 설치하기 위해 PECL을 사용하여 오류의 원인 및 솔루션. 종종 일부 두통이 발생합니다 ...

php8의 새로운 기능은 무엇입니까 php8의 새로운 기능은 무엇입니까 Sep 25, 2023 pm 01:34 PM

php8의 새로운 기능에는 JIT 컴파일러, 유형 추론, 명명된 매개변수, 공용체 유형, 속성, 오류 처리 개선, 비동기 프로그래밍 지원, 새로운 표준 라이브러리 함수 및 익명 클래스 확장이 포함됩니다. 자세한 소개: 1. JIT 컴파일러, PHP8은 중요한 성능 향상을 제공하는 JIT 컴파일러를 도입하여 일부 고주파 실행 코드를 실시간으로 컴파일하고 최적화하여 실행 속도를 향상시킵니다. 개발자가 변수 등을 선언할 때 변수의 유형을 자동으로 추론할 수 있도록 유형 추론 기능을 도입합니다.

한 번만 기록하고 strace를 사용하여 PHP가 너무 많은 시스템 리소스를 차지하는 문제를 진단하세요. 한 번만 기록하고 strace를 사용하여 PHP가 너무 많은 시스템 리소스를 차지하는 문제를 진단하세요. May 03, 2024 pm 04:31 PM

로컬 환경: redhat6.7 시스템. nginx1.12.1, php7.1.0, 코드는 yii2 프레임워크 문제를 사용합니다. 로컬 웹 사이트는 elasticsearch 서비스를 사용해야 합니다. PHP가 로컬 서버에 구축된 Elasticsearch를 사용하는 경우 로컬 로드는 정상입니다. AWS의 Elasticsearch 서비스를 사용할 때 로컬 서버의 부하가 너무 높은 경우가 많습니다. nginx 및 php 로그를 확인하고 예외가 없는지 확인하세요. 시스템의 동시 연결 수도 높지 않습니다. 이때 우리 상사가 알려준 추적 진단 도구가 생각났다. 디버깅 프로세스: PHP 하위 프로세스 idstrace- 찾기

See all articles