PHP8.1의 새로운 기능은 무엇입니까?

PHP7을 계속 사용하고 있다면 이 문서는 바로 당신을 위해 준비한 것입니다.PHP8, 특히 PHP8.1에는 요구 사항이 높은 기능이 내장되어 있으므로 이러한 기능을 이해해야 합니다.이것은 너의 프로그래밍 생활을 더욱 가볍게 할 것이다.

유튜브에서 시청


본문에서 PHP7 방식을 보여드리고 PHP8 방식을 보여드리겠습니다.우리 단도직입적으로 이야기합시다.

빈 보안 연산자


이전에 공합 조작부호를 사용한 적이 있다면, 공합은 방법 호출에 적용되지 않는다는 단점을 알 수 있습니다.
nullsafe 연산자는null 합병과 유사한 기능을 제공하지만 방법 호출도 지원합니다.
NULLSafe 조작부호는 방법의null을 검사할 수 있도록 해 줍니다. 따라서 응답 자체에 IF 문장이 필요하지 않습니다.반대로 당신은 간단하게 추가할 수 있습니까?방법이 끝난 후에 빈 값을 되돌려줄지 확인하십시오.
PHP7
class User {
    public function getProfile() {
        return null;
        return new Profile;
    }
}

class Profile{
    public function getTitle() {
        return null;
        return "Software Engineer";
    }
}

$user = new User;
$profile = $user->getProfile();

/*
pre null coalescing
if ($profile) {
    if($profile->getTitle()) {
        echo $profile->getTitle();
    }else{
        echo 'Not provided';
    }
}
*/

/* post null coalescing */
echo ($profile ? ($profile->getTitle() ?? 'Not provided') : 'Not provided'); 

PHP8
class User {
    public function getProfile() {
        //return null;
        return new Profile;
    }
}

class Profile{
    public function getTitle() {
        //return null;
        return "Software Engineer";
    }
}

$user = new User;
$profile = $user->getProfile();

// uses NULL Operator after the getProfile() method
echo $user->getProfile()?->getTitle() ?? 'Not provided';

건설자 부동산 보급


속성 향상은 구조 파라미터 목록에서 클래스 필드, 구조 함수 정의, 변수 부여 값을 하나의 문법에 조합할 수 있도록 합니다.
모든 클래스 속성과 변수 값을 포기하고 구조 함수 매개 변수 앞에public,protected,private를 추가합니다.PHP는 이 새 구문을 적용하고 코드를 실제로 실행하기 전에 일반 구문으로 변환합니다.
주의: 향상된 속성은 구조 함수에서만 사용할 수 있습니다.
PHP7
class Signup {
    protected UserInfo $user;

    protected PLanInfo $plan;

    public function __construct(UserInfo $user, PlanInfo $plan) {
        $this->user = $user;
        $this->plan = $plan;
    }
}

class UserInfo {
    protected string $username;

    public function __construct($username) {
        $this->username = $username;
    }
}

class PlanInfo {
    protected string $name;

    public function __construct($name = 'yearly') {
        $this->name = $name;
    }
}

$userInfo = new UserInfo('Test Account');
$planInfo = new PlanInfo('monthly');

$signup = new Signup($userInfo, $planInfo);
PHP8
class Signup {
    public function __construct(protected UserInfo $user, protected PlanInfo $plan) {
    }
}

class UserInfo {
    public function __construct(protected string $username) {
    }
}

class PlanInfo {
    public function __construct(protected string $name = 'yearly') {
    }
}

$userInfo = new UserInfo('Test Account');
$planInfo = new PlanInfo('monthly');

$signup = new Signup($userInfo, $planInfo);

일치 표현식


PHP8은 새로운 일치 표현식을 도입했습니다.이것은 강력한 기능으로 통상적으로 switch를 사용하는 것이 더 좋은 선택이다.
참고: Match는 느슨한 유형 검사 대신 엄격한 유형 검사를 수행합니다.이것은 마치 ==이 아니라 ==를 사용하는 것과 같다.
PHP7
$test = 'Send';

switch ($test) {
    case 'Send':
        $type = 'send_message';
        break;
    case 'Remove':
        $type = 'remove_message';
        break;
}
echo $type;
PHP8
$test = 'Send';

$type = match ($test) {
    'Send'=>'send_message',
    'Remove'=>'remove_message'
};

echo $type;

$object::class


현재 $object::class를 사용하여 대상의 클래스 이름을 얻을 수 있습니다.결과는 get 클래스($object)와 같습니다.
만약 php에서 작업한 시간이 충분하다면, 문자열의 클래스 이름을 얻기 위해 Class::method 또는 get_class(new Class()) 같은 클래스 문법을 사용해 보았을 거라고 믿습니다.단, 동적 클래스 이름을 변수에 부여하고 $object::class와 같은 클래스 문법을 사용하면 '동적 클래스 이름이 있는::class' 를 사용할 수 없습니다.PHP8에서 수행할 수 있습니다.
PHP7
해당 없음, 오류 표시
PHP8
class Send{}
$message = new Send();

$type = match ($message::class) {
    'Send'=>'send_message',
    'Remove'=>'remove_message'
};

매개변수/매개변수 이름 지정


명명 매개 변수는 입력 데이터의 매개 변수 이름(매개 변수 순서가 아님)에 따라 함수에 전달할 수 있습니다.이런 유형의 기능은 추적 의미에 도움이 된다.코드를 되돌려주고 호출 방법의 위치를 확인하면 호출된 내용에 대해 곤혹스러울 수 있습니다.
매개변수를 명명하면 이러한 상황을 방지하는 데 도움이 됩니다.그것들은 당신이 이 방법에 어떤 종류의 변수를 분배했는지 미래의 자신에게 알려줄 수 있게 해 준다. 코드를 깊이 연구하고 무엇을 하는지 알 필요가 없다.
주의: 만약 당신의 매개 변수 이름이 방법에 변화가 생겼다면, 이것은 당신의 코드를 파괴할 것입니다. 왜냐하면 이름의 매개 변수가 더 이상 유효하지 않기 때문입니다.
PHP7
class Invoice {
    private $customer;
    private $amount;
    private $date;

    public function __construct($customer, $amount, $date) {
        $this->customer = $customer;
        $this->amount = $amount;
        $this->date = $date;
    }
}

$invoice = new Invoice(
    'Test Account', 
    100, 
    new DateTime
);
PHP8
class Invoice {
    public function __construct(private string $customer, private int $amount, private dateTime $date) {}
}

$invoice = new Invoice(
    customer: 'Test Account', 
    amount: 100, 
    date: new DateTime
);

문자열 도우미


PHP 문자열에서 문자열을 찾을 생각은 없으십니까?PHP8 이전에 PHP가 창설된 이래 가장 많은 요청 항목 중 하나였음에도 불구하고, 이것은 고통일 수도 있고, 고통일 수도 있다.
과거에는 수학이 어떻게 작동하는지 이해하고 매개 변수와 일치해야 했다. 그래, 이미 지나갔다. 문자열이 일치하는 미래는 여기에 있다.
PHP7
$string = 'inv_1234_mid_67890_rec';
echo 'Starts with inv_: '.(substr_compare($string, 'inv_', 0, strLen('_inc')) === 0 ? "Yes" : "No");
echo 'Ends with _rec: '.(substr_compare($string, '_rec', -strLen('_rec')) === 0 ? "Yes" : "No");
echo 'Contains _mid_: '.(strpos($string, '_mid_') ? "Yes" : "No");

PHP8
$string = 'inv_1234_mid_67890_rec';
echo 'Starts with inv_: '.(str_starts_with($string, 'inv_') ? "Yes" : "No");
echo 'Ends with _rec: '.(str_ends_with($string, '_rec') ? "Yes" : "No");
echo 'Contains _mid_: '.(str_contains($string, '_mid_') ? "Yes" : "No");

병합 및 위조 유형


PHP8.0 이전 릴리즈에서는 속성, 매개변수 및 반환 유형에 대해서만 유형을 선언할 수 있습니다.PHP7.1 및 업데이트 버전에는 빈 유형이 있습니다. 즉, 비슷한 유형 선언을 사용하여 유형을 빈 유형으로 선언할 수 있습니다.문자열 또는 PHPDoc 주석을 사용합니다.
PHP8.0에서는 매개변수, 반환 유형 및 클래스 속성에 대해 여러 유형을 선언할 수 있습니다.
PHP7
class Foo {

    public function bar(?Foo $foo) {
        echo 'Complete';
    }
}

$one = new Foo;
$two = new Foo;

$two->bar($one);
$two->bar(null);
// string fails as it is expecting Foo or Null
$two->bar('Test');
PHP8
class Foo {

    public function bar(Foo|string|null $foo) {
        echo 'Complete';
    }
}

$one = new Foo;
$two = new Foo;

// everything works
$two->bar($one);
$two->bar(null);
$two->bar('Test');

결론


PHP8과 PHP8.1 중 가장 좋아하는 새로운 기능은 무엇입니까?나는 PHP로 만든 거의 모든 항목에서 이전 버전을 사용했기 때문에 문자열 조수와 일치 함수입니다.PHP8로 전환하는 데 도움이 되었으면 합니다.

좋은 웹페이지 즐겨찾기