이 기사의 예에서는 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은 메소드를 호출하는 계층 구조의 모든 클래스를 나타냅니다.
다음 예에서 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" */
관심 있는 친구들은 샘플 코드를 사용해 볼 수 있으며 새로운 이득이 있을 것이라고 믿습니다!