찾다
백엔드 개발PHP 튜토리얼PHP: 주요 기능 및 개선 사항

개발자의 작업 방식을 변화시킬 흥미로운 변화를 가져오는 PHP 8.4가 마침내 출시되었습니다! 새로운 버전이 나올 때마다 PHP는 오늘날의 웹 개발 환경에서 왜 그토록 필수적인 도구인지 계속해서 입증하고 있습니다.

전제 조건

이 글에서는 귀하가 PHP 프로그래밍 언어에 대한 기본 지식이 있다고 가정합니다.

PHP 개발에 사용하는 소프트웨어

  • Laravel Herd: PHP 버전과 Nginx 서버를 관리하는 데 사용됩니다.

  • PHPStorm: 우수한 IntelliSense와 AI 부조종사를 갖춘 훌륭한 IDE입니다.

  • Laragon: PHP 및 기타 기술을 지원하는 사용하기 쉬운 로컬 개발 환경입니다.


비대칭 속성 가시성(버전 2)??

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 속성을 수정하려고 하면 공개 범위 때문에 속성을 수정할 수 없다는 오류가 표시됩니다.

PHP : Top Features and Improvements

다음은 비대칭 가시성에 대해 주의해야 할 몇 가지 핵심 사항입니다.

  • 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 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 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
unset ()와 session_destroy ()의 차이점은 무엇입니까?unset ()와 session_destroy ()의 차이점은 무엇입니까?May 04, 2025 am 12:19 AM

thedifferencebetweenUnset () andsession_destroy () istssection_destroy () thinatesTheentiresession.1) TEREMOVECIFICESSESSION 'STERSESSIVEBLESSESSIVESTIETSTESTERSALLS'SSOVERSOLLS '를 사용하는 것들

로드 밸런싱의 맥락에서 스티커 세션 (세션 친화력)이란 무엇입니까?로드 밸런싱의 맥락에서 스티커 세션 (세션 친화력)이란 무엇입니까?May 04, 2025 am 12:16 AM

stickysessionsureSureSureRequestSaroutEdToTheSERSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESSESINCENSENCY

PHP에서 사용할 수있는 다른 세션 저장 핸들러는 무엇입니까?PHP에서 사용할 수있는 다른 세션 저장 핸들러는 무엇입니까?May 04, 2025 am 12:14 AM

phpoffersvarioussessionsaveAndlers : 1) 파일 : 기본, 단순, 단순한 BUTMAYBOTTLENECKONHIGH-TRAFFICSITES.2) MEMCACHED : 고성능, IdealForspeed-CriticalApplications.3) Redis : SimilartomemCached, WithaddedPersistence.4) 데이터베일 : OffforIntegrati

PHP의 세션은 무엇이며 왜 사용됩니까?PHP의 세션은 무엇이며 왜 사용됩니까?May 04, 2025 am 12:12 AM

PHP의 세션은 여러 요청간에 상태를 유지하기 위해 서버 측의 사용자 데이터를 저장하는 메커니즘입니다. 구체적으로, 1) 세션은 session_start () 함수에 의해 시작되며 데이터는 $ _session Super Global Array를 통해 저장되어 읽습니다. 2) 세션 데이터는 기본적으로 서버의 임시 파일에 저장되지만 데이터베이스 또는 메모리 스토리지를 통해 최적화 할 수 있습니다. 3) 세션은 사용자 로그인 상태 추적 및 쇼핑 카트 관리 기능을 실현하는 데 사용될 수 있습니다. 4) 세션의 보안 전송 및 성능 최적화에주의를 기울여 애플리케이션의 보안 및 효율성을 보장하십시오.

PHP 세션의 수명주기를 설명하십시오.PHP 세션의 수명주기를 설명하십시오.May 04, 2025 am 12:04 AM

phpsessionsStartWithSession_start (), whithesauniqueIdAndCreatesErverFile; thepersistacrossRequestSandCanBemanBledentSandwithSession_destroy ()

절대 세션 타임 아웃의 차이점은 무엇입니까?절대 세션 타임 아웃의 차이점은 무엇입니까?May 03, 2025 am 12:21 AM

절대 세션 시간 초과는 세션 생성시 시작되며, 유휴 세션 시간 초과는 사용자가 작동하지 않아 시작합니다. 절대 세션 타임 아웃은 금융 응용 프로그램과 같은 세션 수명주기의 엄격한 제어가 필요한 시나리오에 적합합니다. 유휴 세션 타임 아웃은 사용자가 소셜 미디어와 같이 오랫동안 세션을 활성화하려는 응용 프로그램에 적합합니다.

세션이 서버에서 작동하지 않으면 어떤 조치를 취 하시겠습니까?세션이 서버에서 작동하지 않으면 어떤 조치를 취 하시겠습니까?May 03, 2025 am 12:19 AM

서버 세션 고장은 다음 단계를 따라 해결할 수 있습니다. 1. 서버 구성을 확인하여 세션이 올바르게 설정되었는지 확인하십시오. 2. 클라이언트 쿠키를 확인하고 브라우저가 지원하는지 확인하고 올바르게 보내십시오. 3. Redis와 같은 세션 스토리지 서비스가 정상적으로 작동하는지 확인하십시오. 4. 올바른 세션 로직을 보장하기 위해 응용 프로그램 코드를 검토하십시오. 이러한 단계를 통해 대화 문제를 효과적으로 진단하고 수리 할 수 ​​있으며 사용자 경험을 향상시킬 수 있습니다.

session_start () 함수의 중요성은 무엇입니까?session_start () 함수의 중요성은 무엇입니까?May 03, 2025 am 12:18 AM

session_start () iscrucialinphpformanagingUsersessions.1) itiniteSanewsessionifnoneexists, 2) ResumesAnxistessions, and3) setSasessionCookieForContInuityAcrosrequests, enablingplicationsirecationSerauthenticationAndpersonalizestContent.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.