>백엔드 개발 >PHP7 >PHP7.x 각 버전의 새로운 기능은 무엇입니까?

PHP7.x 각 버전의 새로운 기능은 무엇입니까?

醉折花枝作酒筹
醉折花枝作酒筹앞으로
2021-06-07 09:24:261973검색

이 글에서는 PHP7.x 각 버전의 새로운 기능을 소개합니다. 도움이 필요한 친구들이 모두 참고할 수 있기를 바랍니다.

PHP7.x 각 버전의 새로운 기능은 무엇입니까?

머리말

지난달에 동료가 제가

$a = $a ?? '';

를 쓰는 것을 보고 이 글쓰기 방식이 무엇인지 물었습니다. 다른 글쓰기 방식이 있나요? PHP7 이상에서만 가능한 글쓰기 방법이라고 하더군요. 그는 모른다고 말했다.

저는 마음 속으로 중얼거리며 이 블로그를 쓰기로 했습니다.

PHP7은 기본에 더해 현대적인 PHP여야 합니다. PHP7에서는 강력한 유형 정의와 결합된 비교 연산자와 같은 일부 문법적 작성 방법인 Define()이 배열 및 기타 기능을 정의할 수 있기 때문입니다. 정식 소개는 PHP7.0부터 시작됩니다. 향후 새로운 버전이 추가될 예정이며, 순차적으로 추가될 예정입니다.

자, 시작해 보겠습니다

PHP 7.0

스칼라 유형 선언

스칼라 유형이란 무엇입니까?

네 가지 스칼라 유형:

boolean(부울)

integer(정수)

float(부동 소수점, double이라고도 함)

string(문자열)

두 가지 복합 유형:

array(배열)

객체(object)

리소스는 외부 리소스에 대한 참조를 보유하는 특수 변수입니다. 리소스는 특화된 기능을 통해 생성되고 사용됩니다. 리소스 유형 변수는 파일 열기, 데이터베이스 연결, 그래픽 캔버스 영역 등을 위한 특수 핸들입니다.

더 쉽게 말하면 스칼라 유형은 변수를 정의하는 데이터 유형입니다.

php5에는 클래스 이름, 인터페이스, 배열 및 콜백 함수가 있습니다. PHP에는 문자열, 정수, 부동 소수점 및 부울이 추가되었습니다. 아래의 예를 살펴보겠습니다. 모든 것에 대한 예를 살펴보세요

function typeInt(int $a)
{
    echo $a;
}

typeInt('sad');
// 运行,他讲会报错 Fatal error: Uncaught TypeError: Argument 1 passed to type() must be of the type integer, string given

여기서 $a는 int 유형이어야 함을 정의합니다. 유형 함수에 문자열이 전달되면 오류가 보고됩니다. 위 코드를 수정하면 맞습니다

function typeString(string $a)
{
    echo $a;
}

typeString('sad'); 
//sad

반환값 유형 선언

함수 메서드의 반환값을 정의할 수 있습니다. 예를 들어 내 함수가 int 유형을 반환해야 한다면 반드시 int를 반환합니다. 문자열을 반환하면 오류가 보고됩니다. 다음과 같습니다

<?php

function returnArray(): array
{

    return [1, 2, 3, 4];
}

print_r(returnArray());
/*Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
)
*/

배열을 정의하고 문자열이나 다른 유형을 반환하면 어떻게 되나요?


그러면

function returnErrorArray(): array
{

    return &#39;1456546&#39;;
}

print_r(returnErrorArray());
/*
Array
Fatal error: Uncaught TypeError: Return value of returnArray() must be of the type array, string returned in 
*/

null 병합 연산자

와 같은 오류가 보고됩니다. 일상적으로 삼항 표현식과 isset()을 동시에 사용하는 상황이 많기 때문에 null 병합 연산자(??)를 추가했습니다. ) 구문 설탕. 변수가 존재하고 NULL이 아니면 자체 값을 반환하고, 그렇지 않으면 두 번째 피연산자를 반환합니다.

<?php

$username = $_GET[&#39;user&#39;] ?? &#39;nobody&#39;;
//这两个是等效的  当不存在user 则返回?? 后面的参数

$username = isset($_GET[&#39;user&#39;]) ? $_GET[&#39;user&#39;] : &#39;nobody&#39;;

?>

우주선 연산자

// 整数
echo 1 <=> 1; // 0 当左边等于右边的时候,返回0
echo 1 <=> 2; // -1  当左边小于右边,返回-1
echo 2 <=> 1; // 1  当左边大于右边,返回1

// 浮点数
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1
 
// 字符串
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1

define 배열 정의

PHP7 이전 버전에서는 정의가 배열을 정의할 수 없었습니다. 예를 들어,

define(&#39;ANIMALS&#39;, [
    &#39;dog&#39;,
    &#39;cat&#39;,
    &#39;bird&#39;
]);

echo ANIMALS[1]; // 输出 "cat"

메서드 일괄 가져오기

// PHP 7 之前的代码
use some\namespace\ClassA;
use some\namespace\ClassB;
use some\namespace\ClassC as C;

use function some\namespace\fn_a;
use function some\namespace\fn_b;
use function some\namespace\fn_c;

use const some\namespace\ConstA;
use const some\namespace\ConstB;
use const some\namespace\ConstC;

// PHP 7+ 及更高版本的代码
use some\namespace\{ClassA, ClassB, ClassC as C};
use function some\namespace\{fn_a, fn_b, fn_c};
use const some\namespace\{ConstA, ConstB, ConstC};

###유니코드 코드 포인트 변환이 가능합니다. 구문

echo "\u{aa}"; //ª
echo "\u{0000aa}";  //ª  
echo "\u{9999}"; //香

익명 클래스

<?php
interface Logger {
    public function log(string $msg);
}

class Application {
    private $logger;

    public function getLogger(): Logger {
         return $this->logger;
    }

    public function setLogger(Logger $logger) {
         $this->logger = $logger;
    }
}

$app = new Application;
$app->setLogger(new class implements Logger {  //这里就是匿名类
    public function log(string $msg) {
        echo $msg;
    }
});

PHP 7.1

Nullable 유형

이제 유형 앞에 물음표를 추가하여 매개변수 유형과 반환 값을 null 허용으로 만들 수 있습니다. 이 기능이 활성화되면 전달된 매개변수 또는 함수에서 반환된 결과는 지정된 유형이거나 null 입니다.

<?php

function testReturn(): ?string
{
    return &#39;elePHPant&#39;;
}

var_dump(testReturn()); //string(10) "elePHPant"

function testReturn(): ?string
{
    return null;
}

var_dump(testReturn()); //NULL

function test(?string $name)
{
    var_dump($name);
}

test(&#39;elePHPant&#39;); //string(10) "elePHPant"
test(null); //NULL
test(); //Uncaught Error: Too few arguments to function test(), 0 passed in...

void

<?php
function swap(&$left, &$right) : void
{
    if ($left === $right) {
        return;
    }

    $tmp = $left;
    $left = $right;
    $right = $tmp;
}

$a = 1;
$b = 2;
var_dump(swap($a, $b), $a, $b);

다중 예외 캡처 처리

와 같이 void를 반환하는 유형을 추가합니다. 이 함수는 일상적인 개발에서 여전히 상대적으로 일반적입니다.

<?php
try {
    // some code
} catch (FirstException | SecondException $e) {  //用 | 来捕获FirstException异常,或者SecondException 异常
  
}

PHP 7.2

PHP7.2는 세계에서 가장 인기가 없습니다. PHP7 시리즈 새로운 기능

### 그룹화된 네임스페이스에서 후행 쉼표 허용

예:

<?php

use Foo\Bar\{
    Foo,
    Bar,
    Baz,
};

추상 메서드 재정의 허용

<?php

abstract class A
{
    abstract function test(string $s);
}
abstract class B extends A
{
    // overridden - still maintaining contravariance for parameters and covariance for return
    abstract function test($s) : int;
}

새 객체 유형

<?php

function test(object $obj) : object  //这里 可以输入对象
{
    return new SplQueue();
}

test(new StdClass());

PHP 7.3

PHP7.3 구문에 특별한 것은 없습니다. 레벨 큰 변화.

PHP 7.4

클래스 속성이 유형 선언을 지원합니다

PHP가 강력한 타이핑을 향해 한 걸음 더 나아간 것을 축하합니다

<?php
class User {
    public int $id;
    public string $name;
}
?>

화살표 함수

화살표 함수는 암시적 값별 범위 바인딩을 사용하여 함수를 정의하기 위한 단축 구문을 제공합니다. JS의 화살표 기능과 비슷하지만 fn이 있습니다. 불만의 물결

<?php
$factor = 10;
$nums = array_map(fn($n) => $n * $factor, [1, 2, 3, 4]);
// $nums = array(10, 20, 30, 40);
?>

Null 병합 연산자 지원 방법

<?php
$array[&#39;key&#39;] ??= computeDefault();
// 类似与这个
if (!isset($array[&#39;key&#39;])) {
    $array[&#39;key&#39;] = computeDefault();
}
?>

추천 학습:

php 비디오 튜토리얼

위 내용은 PHP7.x 각 버전의 새로운 기능은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제