new static()과 new self()의 차이점과 사용법 소개

伊谢尔伦
풀어 주다: 2023-03-11 08:04:01
원래의
1566명이 탐색했습니다.

이 글은 주로 PHP에서 new static()과 new self()의 차이점과 유사점에 대한 분석을 소개합니다. 이는 매우 실용적인 기술입니다. PHP 프로그래밍을 배우는 모든 사람에게 도움이 될 것입니다.

문제의 원인은 로컬에서 사이트를 구축하는 것입니다. PHP 5.2를 사용하여 구축할 수 없다는 것을 발견했습니다. 웹사이트 PHP 코드에는 5.3 이상이며 5.2에서 실행하려면 변경이 필요한 부분이 많이 포함되어 있습니다.

바꾸고 보니 곳이 생겼네요

return new static($val);
로그인 후 복사

대박이네요

return new self($val);
로그인 후 복사

밖에 본적이 없어서 인터넷으로 확인해보니 둘의 차이점이 있더라구요.

self - 이 클래스입니다. 코드 세그먼트에 있는 이 클래스입니다.

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

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

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

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

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

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_static()); // A
로그인 후 복사

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

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

사실, get_class($this);를 사용하는 것만큼 간단합니다. 코드는 다음과 같습니다.

class A {
  public function create1() {
    $class = get_class($this);
    return new $class();
  }
  public function create2() {
    return new static();
  }
}

class B extends A {

}

$b = new B();
var_dump(get_class($b->create1()), get_class($b->create2()));

/*
The result 
string(1) "B"
string(1) "B"
*/
로그인 후 복사

관심 있는 친구들이 샘플 코드를 테스트해 볼 수 있으며 새로운 이득이 있을 것이라고 믿습니다!

위 내용은 new static()과 new self()의 차이점과 사용법 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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