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

小云云
풀어 주다: 2023-03-22 21:22:02
원래의
1350명이 탐색했습니다.

이 기사는 주로 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() 사이에 차이가 없는 것 같습니다. 계속 해보자:

 Sun1  Sun2  (-> (-> (-> (->getNewCaller());看上面的代码,现在这个Father类有两个子类,由于Father类的getNewFather()和getNewCaller()是public的,所以子类继承了这两个方法。
로그인 후 복사

인쇄된 결과는 다음과 같습니다: 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에서 new self()와 new static()의 차이점에 대해 설명했습니다. 문제가 있는 경우 언제든지 댓글을 남겨주세요. .

관련 추천:

new self()와 new static()의 차이점은 무엇입니까?

PHP에서 new self()와 new static()의 차이점은 무엇입니까!

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

위 내용은 PHP에서 new self()와 new static()의 차이점은 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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