PHP8.1의 새로운 기능은 무엇입니까?
23073 단어 phptutorialwebdevproductivity
유튜브에서 시청
본문에서 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');
PHP8class 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);
PHP8class 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
);
PHP8class 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');
PHP8class 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로 전환하는 데 도움이 되었으면 합니다.
Reference
이 문제에 관하여(PHP8.1의 새로운 기능은 무엇입니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/thedevdrawer/whats-new-in-php-81-4lfb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)