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