PHP에는 구분할 수 없는 함수가 많이 있습니다. 예를 들어 new self()와 new static()의 차이점은 무엇인가요? 물론, 매우 강력한 친구들도 있습니다. 그래서 이 글에서는 PHP의 new self()와 new static()의 차이점을 여러분과 공유할 것입니다.
1.new static()은 PHP5.3 버전에 도입된 새로운 기능입니다.
2. new static()이든 new self()이든 새 개체는 새롭습니다.
3. 이 두 가지 방법에서 new로 생성된 객체의 차이점은 무엇입니까? 직설적으로 말하면 new로 생성된 객체는 동일한 클래스 인스턴스입니까, 아니면 다른 클래스 인스턴스입니까?
위 문제를 살펴보기 위해 간단한 코드부터 시작하겠습니다.
class Father { public function getNewFather() { return new self(); } public function getNewCaller() { return new static(); } } $f = new Father(); print get_class($f->getNewFather()); print get_class($f->getNewCaller());
위 코드의 get_class() 메서드는 인스턴스가 속한 클래스 이름을 가져오는 데 사용됩니다.
결과는 다음과 같습니다. getNewFather() 또는 getNewCaller() 호출에 관계없이 Father 클래스의 인스턴스가 반환됩니다.
인쇄된 결과는 다음과 같습니다: FatherFather
이 시점에서는 new self()와 new static() 사이에 차이가 없는 것 같습니다. 계속해 보겠습니다.
class Sun1 extends Father { } class Sun2 extends Father { } $sun1 = new Sun1(); $sun2 = new Sun2(); print get_class($sun1->getNewFather()); print get_class($sun1->getNewCaller()); print get_class($sun2->getNewFather()); print get_class($sun2->getNewCaller());
위 코드를 살펴보세요. 이제 이 Father 클래스에는 두 개의 하위 클래스가 있습니다. Father 클래스의 getNewFather() 및 getNewCaller()는 이 두 메서드를 상속합니다.
인쇄된 결과는 다음과 같습니다: FatherSun1FatherSun2
우리는 그것이 Sun1이든 Sun2이든, getNewFather()를 호출하여 반환된 객체는 Father 클래스의 인스턴스인 반면, getNewCaller()는 호출자의 인스턴스를 반환한다는 것을 발견했습니다.
즉, $sun1은 Sun1 클래스의 인스턴스를 반환하고 $sun2는 Sun2 클래스의 인스턴스를 반환합니다.
이제 나는 new self()와 new static()의 차이점을 이해한 것 같습니다.
우선, 그 차이는 상속에만 반영될 수 있습니다. 상속이 없으면 둘 사이에는 차이가 없습니다.
그런 다음 new self()가 반환한 인스턴스는 누가 호출하든 동일한 클래스의 인스턴스를 반환하지만 new static()은 호출자에 의해 결정됩니다.
위 $sun1->getNewCaller()의 호출자는 $sun1이군요! $sun1은 Sun1 클래스의 인스턴스이므로 반환되는 내용은 Sun1 클래스의 인스턴스입니다. $sun2에 대한 동일한 이유는 반복되지 않습니다.
관련 권장 사항:
php_PHP 튜토리얼의 new self()에 대한 자세한 설명
new static()과 new self() staticself
new static() 사이의 유사점과 차이점은 무엇입니까? 어떻게 대처해야 할까요
위 내용은 new self()와 new static()의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!