>  기사  >  백엔드 개발  >  PHP 객체 지향에서 new self()와 new static()의 차이점은 무엇입니까

PHP 객체 지향에서 new self()와 new static()의 차이점은 무엇입니까

巴扎黑
巴扎黑원래의
2018-05-15 17:03:412599검색

객체 지향 PHP에서 new self()와 new static()의 차이점은 다음과 같습니다. new self()가 반환하는 인스턴스는 변경되지 않고 항상 동일한 클래스의 인스턴스를 반환합니다. new static()이 반환하는 인스턴스는 다음과 같습니다. 발신자가 결정했습니다.

PHP 객체 지향에서 new self()와 new static()의 차이점은 무엇입니까

new static()은 PHP5.3 버전에 도입된 새로운 기능입니다. new static()이든 new self()이든 새 객체는 새 객체입니다. 이 두 가지 방법에서 new로 생성된 객체의 차이점은 무엇입니까? 다음 기사에서는 이를 소개합니다.

PHP 객체 지향에서 new self()와 new static()의 차이점

이 문제를 살펴보기 위해 먼저 간단한 코드를 실행해 보겠습니다.

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()의 차이점은 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.