개발자의 작업 방식을 변화시킬 흥미로운 변화를 가져오는 PHP 8.4가 마침내 출시되었습니다! 새로운 버전이 나올 때마다 PHP는 오늘날의 웹 개발 환경에서 왜 그토록 필수적인 도구인지 계속해서 입증하고 있습니다.
이 글에서는 귀하가 PHP 프로그래밍 언어에 대한 기본 지식이 있다고 가정합니다.
Laravel Herd: PHP 버전과 Nginx 서버를 관리하는 데 사용됩니다.
PHPStorm: 우수한 IntelliSense와 AI 부조종사를 갖춘 훌륭한 IDE입니다.
Laragon: PHP 및 기타 기술을 지원하는 사용하기 쉬운 로컬 개발 환경입니다.
PHP에서 객체 속성의 가시성은 전통적으로 대칭이었습니다. 즉, 속성에 대한 get 및 set 작업은 공개, 비공개 또는 보호와 같은 동일한 가시성을 공유해야 하지만 다를 수는 없습니다.
예를 들어, 속성이 공개인 경우 해당 속성에 대한 읽기 및 쓰기가 모두 공개되며, 다른 작업 없이는 한 작업을 허용할 수 없습니다.
컨텍스트에서 public 클래스의 속성을 선언하면 변경 가능하게 되어 클래스 외부에서 읽고 수정할 수 있습니다.
그러나 비대칭 가시성의 출현으로 이제 읽기 및 쓰기 속성에 대해 별도의 범위를 정의할 수 있습니다.
이는 속성이 한 컨텍스트에서 읽을 수 있고 다른 컨텍스트에서 쓰기 가능하다는 것을 의미하므로 속성에 액세스하고 수정하는 방법을 더 효과적으로 제어할 수 있습니다.
class Animal{ public private(set) string $name; public setName(string $foo){ $ths->name = $foo; } } $animal = new Animal(); echo $animal->name; // This will run correctly
속성을 공개로 설정하고 설정된 속성을 비공개로 설정할 수 있습니다. 이는 속성이 클래스 외부에서 업데이트될 수 없으므로 변경할 수 없음을 의미합니다.
$name 속성을 수정하려고 하면 공개 범위 때문에 속성을 수정할 수 없다는 오류가 표시됩니다.
다음은 비대칭 가시성에 대해 주의해야 할 몇 가지 핵심 사항입니다.
set-visibility 선언에는 공백이 허용되지 않습니다. private(set)이 맞습니다. private( set )이 올바르지 않아 구문 분석 오류가 발생합니다.
속성이 공개로 선언된 경우 기본 가시성이 생략될 수 있습니다. 예를 들어, public private(set)과 private(set)은 공개 가시성을 암시하므로 동일하게 동작합니다.
입력된 속성만 집합 작업에 대해 별도의 가시성을 가질 수 있습니다. 즉, PHP에서는 유형이 지정되지 않은 속성에 비대칭 가시성을 적용할 수 없습니다.
설정된 가시성은 가시성 확보와 동일하거나 그보다 더 제한적이어야 합니다. 예를 들어 public protected(set) 및 protected protected(set)는 유효하지만 protected public(set)은 구문 오류가 발생합니다.
다른 정독 예시를 포함하여 비대칭 가시성에 대해 자세히 알아보세요.
속성 후크는 개발자가 변수를 읽고 쓰기 위한 메소드를 명시적으로 생성하지 않고도 변수에 직접 get 및 set 지시문을 추가할 수 있는 방법을 제공하는 PHP 8.4의 뛰어난 기능입니다.
또는 __get 및 __set 매직 메서드를 사용할 수 있지만 이렇게 하면 코드가 더 장황해지고 오류가 발생할 수 있으며 정적 분석 도구가 손상될 수 있습니다.
속성 후크의 디자인과 구문은 Kotlin과 유사하다고 해도 과언이 아니지만 대부분 C# 및 Swift 프로그래밍 언어의 영향을 받았습니다.
PHP 8.3에서는 생성자에 속성이 있는 클래스를 생성할 수 있으며, 이를 통해 속성을 읽고 쓸 수 있습니다.
class Animal{ public private(set) string $name; public setName(string $foo){ $ths->name = $foo; } } $animal = new Animal(); echo $animal->name; // This will run correctly
이 접근 방식의 문제점은 속성에 쓰기로 결정할 때 __set 매직 메서드를 사용하거나 명시적으로 변수를 변경하는 메서드를 생성하여 코드 베이스가 중단될 수 있다는 것입니다.
속성 후크를 사용하면 개발자가 속성을 생성한 후 즉시 set 지시어를 생성할 수 있습니다.
class Car { public function __construct(public string $model) { } }
set 지시어에 전달된 값은 속성과 동일한 유형이어야 합니다. 그렇지 않으면 오류가 발생합니다.
다음과 같이 속성에 쓰기 전에 다른 유형을 set 지시문에 전달하고 올바른 유형으로 변환할 수 있습니다.
class Car{ public string $model{ set (string $value) { if(strlen($value) === 0){ throw new ValueError("Model name cannot be empty"); } $this->model = $value; } } }
위의 예는 set 지시문에서 복합 유형 변수를 안전하게 수신하고 이를 속성에 정의된 올바른 유형으로 구문 분석하는 방법을 보여줍니다.
속성 유형과 동일한 경우 set 지시문에 전달된 인수를 생략할 수 있습니다. 예를 들어 아래 두 가지 방법은 유효하며 유사하게 동작합니다.
class Car{ public string $year{ set (string|number $value) { $year = intval($value); if($year < 2000){ throw new ValueError("We only accept cars produced in year 2000 and above"); } $this->year= $value; } } }
생략된 경우 인수의 기본값은 $value로 설정됩니다. 이 구문은 Kotlin 및 C#과 같은 프로그래밍 언어에서 일반적입니다.
이 기능 이전에는 PHP에서 클래스 멤버에 액세스하려면 클래스 주위에 추가 괄호를 추가해야 했습니다.
// --------------------------METHOD 1---------------------------- public string $model{ set (string $value) { if(strlen($value) === 0){ throw new ValueError("Model name cannot be empty"); } $this->model = $value; } } // --------------------------METHOD 2---------------------------- public string $model{ set { if(strlen($value) === 0){ throw new ValueError("Model name cannot be empty"); } $this->model = $value; } }
새 Car() 호출을 괄호로 묶지 않으면 구문 분석 오류가 발생합니다.
새로운 구문을 사용하면 추가 괄호 없이 메서드, 속성 및 상수에 액세스할 수 있습니다.
class Car { public function getName(){ return "Toyota Camry"; } } $carName = (new Car())->getName();
이 제안된 변경 사항에 대한 자세한 내용은 RFC의 세부정보를 확인하세요.
PHP 8.4에 새로운 도우미 기능이 추가되었습니다.
이러한 함수 중 일부는 이미 Laravel Arr 또는 Collection 도우미에 구현되어 있습니다.
array_find_key() 함수
array_find_key($array, $callback) 함수는 $callback 메소드가 true를 반환하는 첫 번째 요소의 키를 반환합니다. 조건을 충족하는 요소가 없으면 함수는 null을 반환합니다.
class Animal{ public private(set) string $name; public setName(string $foo){ $ths->name = $foo; } } $animal = new Animal(); echo $animal->name; // This will run correctly
array_find() 함수
array_find_key() 함수는 배열을 검색하여 콜백 함수에서 정의한 조건을 만족하는 첫 번째 요소의 키를 반환하도록 설계되었습니다.
array_find_key()와 마찬가지로 일치하는 요소가 없으면 null을 반환합니다.
class Car { public function __construct(public string $model) { } }
배열에 10보다 큰 과일이 없으면 함수는 null을 반환합니다.
array_any() 함수
array_any() 함수는 배열 내 하나 이상의 요소가 제공된 평가 함수에서 지정한 특정 기준을 충족하는지 확인합니다.
최소 하나의 요소가 조건을 충족하면 함수는 true를 반환합니다. 그렇지 않으면 false를 반환합니다.
class Car{ public string $model{ set (string $value) { if(strlen($value) === 0){ throw new ValueError("Model name cannot be empty"); } $this->model = $value; } } }
배열에 10보다 큰 숫자가 없으면 함수는 false를 반환합니다.
array_all() 함수
array_all() 함수는 배열의 모든 단일 항목이 특정 테스트를 통과하는지 확인합니다. 각 항목에 특별한 규칙(콜백 함수)을 적용합니다.
모든 항목이 규칙에 따라 테스트를 통과하면 array_all()은 true를 반환합니다.
class Car{ public string $year{ set (string|number $value) { $year = intval($value); if($year < 2000){ throw new ValueError("We only accept cars produced in year 2000 and above"); } $this->year= $value; } } }
이 예에서 array_all() 함수는 $numbers 배열을 반복하고 콜백 함수를 각 요소에 적용합니다. 콜백은 숫자가 2로 나누어지는지(예: 짝수) 확인합니다.
배열의 모든 숫자가 짝수이므로 array_all() 함수는 true를 반환하고 "모든 숫자는 짝수입니다."라는 메시지가 표시됩니다. 표시됩니다.
PHP 8.4에 도입된 주요 개선 사항을 살펴보았습니다. 이러한 업데이트는 강력한 새 기능과 잠재적인 효율성 향상을 포함하여 개발자에게 귀중한 개선 사항을 제공합니다.
예제 및 자세한 설명을 포함하여 모든 업데이트에 대해 더 자세히 알아보려면 공식 PHP 8.4.0 릴리스 발표 페이지를 방문하세요.
최신 버전으로의 원활한 전환을 위해 지원 중단 및 이전 버전과의 호환성 변경 사항을 검토하는 것을 잊지 마세요.
기사가 마음에 드셨다면, 다른 사람들과 공유하는 것도 잊지 마세요.
여러분의 생각을 듣고 싶습니다. 아래에 댓글을 남겨 대화를 계속 이어가세요. 건배! ?
더 많은 PHP, Node.js, TypeScript 및 PHP 기사를 보려면 저를 팔로우하세요! Twitter나 LinkedIn에서도 저를 만나보실 수 있습니다.
위 내용은 PHP: 주요 기능 및 개선 사항의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!