> 백엔드 개발 > PHP 튜토리얼 > PHP 5.2와 PHP 5.3: `new static()`과 `new self()` – 주요 차이점과 호환성 문제는 무엇입니까?

PHP 5.2와 PHP 5.3: `new static()`과 `new self()` – 주요 차이점과 호환성 문제는 무엇입니까?

Patricia Arquette
풀어 주다: 2024-12-12 21:11:15
원래의
477명이 탐색했습니다.

PHP 5.2 vs. PHP 5.3:  `new static()` vs. `new self()` – What are the Key Differences and Compatibility Issues?

PHP의 새로운 자체 대 새로운 정적: 호환성 및 차이점

PHP 5.3 코드를 PHP 5.2로 변환하면 구문 변경으로 인해 문제가 발생하는 경우가 많습니다. . 이러한 문제 중 하나는 후기 정적 바인딩 사용, 특히 return new static($options); 사용에서 발생합니다. 이 컨텍스트에서 static을 self로 바꾸면 동일한 결과가 나오지 않을 수 있습니다.

차이점 이해

self는 새 키워드가 정의된 클래스를 참조하는 반면 static은 PHP 5.3의 최신 정적 바인딩 기능에 도입된 은 메소드가 있는 계층 구조의 클래스를 나타냅니다. 호출됩니다.

PHP 5.2에서 new self 사용의 결과

PHP 5.2에서 static을 self로 바꾸면 모호한 동작이 발생합니다. self는 호출된 클래스에 관계없이 항상 메서드가 정의된 클래스를 참조합니다. 이로 인해 잘못된 개체 인스턴스화 및 불일치가 발생할 수 있습니다.

다음 코드를 고려하세요.

class Animal {
    public static function getInstance() {
        return new self();
    }
}

class Dog extends Animal {
    public static function getInstance() {
        return new static();
    }
}
로그인 후 복사

PHP 5.3에서 Dog를 호출합니다. :getInstance()는 Dog의 인스턴스를 반환하고 Animal::getInstance()를 호출하면 Dog의 인스턴스를 반환합니다. Animal.

그러나 PHP 5.2에서는 두 메서드 모두 self가 Animal을 참조하기 때문에 두 호출 모두 Animal의 인스턴스를 반환합니다.

결론

new self와 new static은 PHP 5.3에서는 동일하지만 PHP 5.2에서는 크게 다릅니다. PHP 5.2에서 new static($options)을 new self($options)로 변환하면 잘못된 결과가 나올 수 있으며 이 문제에 대해 알려진 해결 방법은 없습니다.

위 내용은 PHP 5.2와 PHP 5.3: `new static()`과 `new self()` – 주요 차이점과 호환성 문제는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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