php7과 PHP5의 새로운 기능 및 성능 최적화 비교
1. AST(추상 구문 트리)
AST는 PHP 컴파일 프로세스에서 원래 인터프리터를 대체하는 미들웨어 역할을 합니다. 직접 opcode를 내보내는 방식은 인터프리터(파서)와 컴파일러(컴파일러)를 분리하여 일부 Hack 코드를 줄이고 구현을 더 쉽게 이해하고 유지 관리할 수 있도록 합니다. 권장(무료):
PHP7스레드 데이터 공유 보안, 데이터 공유 메모리 공간을 위한 전역 스레드 열기
3. 매개변수 반환 값 유형 지정
4. zval 구조 변경
5. PHP 5의 try...catch...finally는 전통적인 오류를 처리할 수 없습니다. 필요한 경우 일반적으로 set_error_handler()를 사용하여 해킹하는 것을 고려할 것입니다. 그러나 여전히 set_error_handler()로 포착할 수 없는 오류 유형이 많이 있습니다.
PHP 7에서는 오류와 예외 모두 Throwable을 구현합니다. Throwable은 직접 구현할 수 없지만 Exception 및 Error 클래스는 확장될 수 있습니다. Throwable을 사용하여 예외와 오류를 잡을 수 있습니다. Exception은 모든 PHP의 기본 클래스이고 Error는 모든 내부 PHP 오류의 기본 클래스입니다.
6. 새로운 매개변수 구문 분석 방법 7. 해시 테이블 변경버킷과 Zval은 더 이상 메모리를 별도로 할당하지 않아 불필요한 중복성을 많이 제거합니다.
8. Null Coalesce 연산자
예제로 직접:
$name = $name ?? "NoName"; // 如果$name有值就取其值,否则设$name成"NoName"
9. 우주선 연산자(Spaceship Operator)(결합 비교 연산자)
양식:
(expr) < ;= >(expr)왼쪽 피연산자가 더 작으면 -1이 반환되고, 왼쪽 피연산자가 더 크면 0이 반환됩니다.
$name = ["Simen", "Suzy", "Cook", "Stella"]; usort($name, function ($left, $right) { return $left <=> $right; }); print_r($name);
10. 상수 배열
PHP 7에서는 이전에 클래스/인터페이스에서만 상수 배열을 사용할 수 있었습니다. 이제 PHP 7은 클래스가 아닌 인터페이스에서도 일반 상수 배열을 지원합니다.
define("USER", [ "name" => "Simen", "sex" => "Male", "age" => "38", "skill" => ["PHP", "MySQL", "C"] ]); // USER["skill"][2] = "C/C++"; // PHP Fatal error: Cannot use temporary expression in write context in...
11. 통합 변수 구문
$goo = [ "bar" => [ "baz" => 100, "cug" => 900 ] ]; $foo = "goo"; $$foo["bar"]["baz"]; // 实际为:($$foo)['bar']['baz']; PHP 5 中为:${$foo['bar']['baz']}; // PHP 7 中一个笼统的判定规则是,由左向右结合。
이것은 PHP 7에 도입될 것으로 기대되는 새로운 기능으로, PHP의 오류 처리 기능을 크게 향상시킵니다. PHP 5의 try ... catch ... finally는 전통적인 오류를 처리할 수 없으므로 일반적으로 필요한 경우 set_error_handler()를 사용하여 해킹하는 것을 고려할 것입니다. 그러나 set_error_handler()가 포착할 수 없는 오류 유형이 여전히 많이 있습니다. PHP 7에는 Throwable 인터페이스가 도입되었습니다. Throwable은 직접 구현될 수 없지만 Exception 및 Error 클래스는 확장될 수 있습니다. Throwable을 사용하여 예외와 오류를 잡을 수 있습니다. Exception은 모든 PHP의 기본 클래스이고 Error는 모든 내부 PHP 오류의 기본 클래스입니다.
$name = "Tony"; try { $name = $name->method(); } catch (\Error $e) { echo "出错消息 --- ", $e->getMessage(), PHP_EOL; } try { $name = $name->method(); } catch (\Throwable $e) { echo "出错消息 --- ", $e->getMessage(), PHP_EOL; } try { intp(5, 0); } catch (\pisionByZeroError $e) { echo "出错消息 --- ", $e->getMessage(), PHP_EOL; }
13. 조합문을 사용하세요
조합문을 사용하면 입력 중복을 줄일 수 있습니다.
use PHPGoodTaste\Utils\{ Util, Form, Form\Validation, Form\Binding };
14. 여러 유형의 예외/오류를 한 번에 포착
PHP 7.1에는 수직 막대 "|"를 통해 여러 예외/오류 유형을 포착하는 새로운 구문이 추가되었습니다.
try { throw new LengthException("LengthException"); // throw new pisionByZeroError("pisionByZeroError"); // throw new Exception("Exception"); } catch (\pisionByZeroError | \LengthException $e) { echo "出错消息 --- ", $e->getMessage(), PHP_EOL; } catch (\Exception $e) { echo "出错消息 --- ", $e->getMessage(), PHP_EOL; } finally { // ... }
15. 가시성 수정자 변경
PHP 7.1 이전의 클래스 상수는 가시성 수정자를 추가할 수 없습니다. 현재 클래스 상수의 가시성은 공개와 동일합니다. PHP 7.1에는 클래스 상수에 대한 가시성 수정자 지원이 추가되었습니다. 일반적으로 가시성 수정자의 사용 범위는 다음과 같습니다.
함수/메서드: public, private, protected, abstract, final
Class: abstract, final속성/변수: public, private, protectedclass YourClass { const THE_OLD_STYLE_CONST = "One"; public const THE_PUBLIC_CONST = "Two"; private const THE_PRIVATE_CONST = "Three"; protected const THE_PROTECTED_CONST = "Four"; }
$fn = function (iterable $it) : iterable { $result = []; foreach ($it as $value) { $result[] = $value + 1000; } return $result; }; $fn([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
Nullable Type
PHP 7.1에서는 Nullable Type을 도입했습니다. 새롭게 떠오르는 Kotlin 프로그래밍 언어의 기믹 기능 중 하나는 null 허용 유형입니다. PHP는 점점 더 "강력한 유형의 언어"처럼 되어가고 있습니다. 동일한 유형의 필수 요구사항에 대해 Null 허용 여부를 설정할 수 있습니다.
$fn = function (?int $in) { return $in ?? "NULL"; }; $fn(null); $fn(5); $fn(); // TypeError: Too few arguments to function {closure}(), 0 passed in ...
Void 반환 유형
PHP 7.1에서는 Void 반환 유형이 도입되었습니다.
아아아아위 내용은 php7과 PHP5 비교의 새로운 기능과 성능 최적화 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!