> 백엔드 개발 > PHP 튜토리얼 > PHP_php 팁에서 new static()과 new self()의 차이점 소개

PHP_php 팁에서 new static()과 new self()의 차이점 소개

WBOY
풀어 주다: 2016-05-16 20:26:08
원래의
1837명이 탐색했습니다.

밤은 길다!

오늘 저는 팀을 이끌고 지역 웹사이트를 구축했습니다. PHP 5.2에서는 빌드할 수 없다는 것을 알았습니다. PHP 코드에는 5.3 이상인 부분이 많습니다. 상사가 5.2에서 실행할 수 있도록 변경하라고 했습니다.

바꾸고 찾은 곳

코드 복사 코드는 다음과 같습니다.

새로운 정적($val) 반환;

이 빌어먹을 말은 정말 놀랍습니다. 처음 본 것 같아요
코드 복사 코드는 다음과 같습니다.

새로운 자신을 반환($val);

그래서 둘의 차이점을 알아보기 위해 온라인으로 확인해 봤습니다.

self – 이것이 바로 이 클래스입니다. 코드 세그먼트에 있는 이 클래스입니다.

static - PHP 5.3은 $this와 유사한 현재 클래스만 추가합니다. 이는 힙 메모리에서 추출되어 현재 인스턴스화된 클래스에 액세스하므로 static은 해당 클래스를 나타냅니다.

외국인의 전문적인 설명을 들어보겠습니다.

self는 새로운 작업이 수행되는 메서드와 동일한 클래스를 나타냅니다.

PHP 5.3의 최신 정적 바인딩에서 static은 메소드를 호출하는 계층 구조의 모든 클래스를 나타냅니다.

다음 예에서 B는 A로부터 두 메서드를 모두 상속합니다. self는 A의 첫 번째 메서드 구현에 정의되어 있으므로 A에 바인딩되는 반면 static은 호출된 클래스에 바인딩됩니다( get_called_class() 참조).

코드 복사 코드는 다음과 같습니다.

클래스 A {
공개 정적 함수 get_self() {
          새로운 자기 반환();
}

공개 정적 함수 get_static() {
          새로운 static() 반환;
}
}

클래스 B가 A를 확장합니다. {}

echo get_class(B::get_self()) //A
echo get_class(B::get_static()) // B
echo get_class(A::get_static()) // A


이 예는 기본적으로 한눈에 이해하기 쉽습니다.

원리는 이해하지만 아직 문제가 해결되지 않았습니다. return new static($val); 문제를 해결하는 방법은 무엇입니까?

실제로 get_class($this)를 사용하는 방법은 다음과 같이 간단합니다

코드 복사 코드는 다음과 같습니다.

클래스 A {
공개 함수 create1() {
          $class = get_class($this);
새로운 $class() 반환;
}
공개 함수 create2() {
          새로운 static()을 반환합니다.
}
}

클래스 B가 A를 확장합니다. {

}

$b = 새로운 B();
var_dump(get_class($b->create1()), get_class($b->create2()));

/*
그 결과
문자열(1) "B"
문자열(1) "B"
*/

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