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