> 백엔드 개발 > PHP 튜토리얼 > PHP 5.2 대 5.3: 'new self'가 'new static'을 대체할 수 있습니까?

PHP 5.2 대 5.3: 'new self'가 'new static'을 대체할 수 있습니까?

Patricia Arquette
풀어 주다: 2024-12-24 09:41:19
원래의
385명이 탐색했습니다.

PHP 5.2 vs. 5.3: Can

후기 정적 바인딩: "새로운 자기"와 "새로운 정적" 분석

PHP 라이브러리를 버전 5.3에서 5.2로 전환할 때, "새 항목 반환"과 같은 코드 조각으로 예시되는 늦은 정적 바인딩 문제가 발생합니다. 정적($옵션)". PHP 5.2에서는 이러한 구문을 사용할 수 없습니다. 이 문서의 목적은 "새로운 자체"와 "새로운 정적" 사이의 미묘한 차이를 살펴보고 "새로운 자체"가 PHP 5.2 환경에서 동일한 기능을 제공하는지 확인하는 것입니다.

"새로운 자체"와 "새로운 자체"의 차이점 "new static"

PHP 5.2에서 "self"는 "new" 키워드가 명시적으로 선언된 클래스를 참조합니다. 이와 대조적으로, PHP 5.3의 최신 정적 바인딩 기능을 갖춘 "정적"은 상속 계층 구조 내에서 메서드가 호출된 클래스를 가리킵니다.

이러한 차이점을 설명하려면 다음 클래스 구조를 고려하세요.

class A {
    public static function get_self() {
        return new self();
    }

    public static function get_static() {
        return new static();
    }
}

class B extends A {}
로그인 후 복사

이 예에서 "get_self" 및 "get_static" 메소드는 클래스 A에서 클래스 B로 상속됩니다. B에서 "get_self"를 호출하면 "self" 참조는 메서드가 정의된 클래스에 바인딩되므로 클래스 A의 인스턴스입니다. 그러나 B에서 "get_static"을 호출하면 클래스 B의 인스턴스가 반환됩니다. 후기 정적 바인딩의 "static"은 메서드가 호출되는 클래스로 확인되기 때문입니다.

"new static" 적용 PHP 5.2로

안타깝게도 PHP 5.3의 "새로운 정적" 기능을 PHP에서 구현하는 직접적인 해결 방법은 없습니다. 5.2. "return new self($options)" 문은 PHP 5.3에서와 동일한 결과를 산출하지 않습니다. "self"는 항상 메소드가 호출된 클래스가 아니라 메소드가 정의된 클래스를 참조하기 때문입니다.

위 내용은 PHP 5.2 대 5.3: 'new self'가 'new static'을 대체할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿