> 백엔드 개발 > PHP 튜토리얼 > PHP 5.2에서 5.3으로 마이그레이션: `new self()`와 `new static()`의 차이점은 무엇입니까?

PHP 5.2에서 5.3으로 마이그레이션: `new self()`와 `new static()`의 차이점은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-12-18 15:40:12
원래의
646명이 탐색했습니다.

PHP 5.2 to 5.3 Migration: What's the Difference Between `new self()` and `new static()`?

PHP에서 "새로운 자아"와 "새로운 정적"의 차이점 이해

PHP 5.3 라이브러리를 PHP 5.2로 변환하는 것은 어려울 수 있습니다. , 주로 구문의 차이로 인해 발생합니다. 문제점 중 하나는 new static($options) 반환과 같은 후기 정적 바인딩을 사용하는 것입니다.

"새 자체"로 변환이 미치는 영향

return new static($options)을 return new self($options)로 변경하면 동일한 결과가 나오지 않습니다. PHP 5.3에 도입된 후기 정적 바인딩을 사용하면 메서드가 호출되는 클래스를 참조하는 static 키워드를 사용하여 클래스의 메서드를 호출할 수 있습니다. 그러나 PHP 5.2는 이 기능을 지원하지 않습니다.

"새 셀프"와 "새 정적"의 주요 차이점

  • 셀프: new 키워드가 속한 클래스를 나타냅니다. 작성되었습니다.
  • 정적: 후기 정적 바인딩(PHP 5.3 )에서 메소드가 호출된 클래스를 나타냅니다.

예:

다음 사항을 고려하세요. code:

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

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

class B extends A {}

echo get_class(B::get_self());  // A
echo get_class(B::get_static()); // B
echo get_class(A::get_self()); // A
echo get_class(A::get_static()); // A
로그인 후 복사

이 예에서 get_self의 자체 호출은 메서드가 A에 정의되어 있으므로 클래스 A에 바인딩됩니다. 그러나 get_static의 정적 호출은 메서드가 있는 클래스에 바인딩됩니다. 호출되며 상황에 따라 달라집니다(예: 두 번째의 B 호출).

결론

PHP 5.2의 경우 늦은 정적 바인딩에 대한 직접적인 해결 방법은 없습니다. new static을 new self로 바꾸면 동일한 동작이 제공되지 않습니다. PHP 5.3 코드를 이전 버전으로 변환할 때 이러한 키워드 간의 차이점을 이해하는 것이 중요합니다.

위 내용은 PHP 5.2에서 5.3으로 마이그레이션: `new self()`와 `new static()`의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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