PHP 에서 new static()과 new self()의 비교

2428 단어 newstaticself
오늘 coding 에서 new static()을 발 견 했 는데,실례 화 된 곳 은 new self()가 아닌가 요?조 회 를 해 보고 나 서 야 둘 의 차 이 를 알 게 되 었 다.
1)유자 류 집적 시 양자 의 표현 이 다르다
2)phop 5.2 및 이하 버 전 은 new static()의 문법 을 지원 하지 않 습 니 다.
쉽게 말 하면 self 는 어떤 종류 에 쓰 여 있 습 니까?실제 호출 된 것 은 바로 이 종류 입 니 다.이른바 후기 정적 바 인 딩,static 대표 가 사용 하 는 이 종 류 는 바로 당신 이 아버지 클래스 에 쓴 static 입 니 다.
그리고 하위 클래스 를 통 해 이 static 를 직접/간접 적 으로 사 용 했 습 니 다.이 static 은 바로 이 하위 클래스 를 말 합 니 다.그래서 static 는$this 와 비슷 하지만 static 는 정적 방법 과 속성 등에 사용 할 수 있 습 니 다.
구체 적 인 설명 은 다음 과 같다.
self-바로 이 종류 입 니 다.코드 세그먼트 에 있 는 이 종류 입 니 다.
static-PHP 5.3 을 추가 한 것 은 현재 클래스 일 수 밖 에 없습니다.$this 와 비슷 하 다 는 뜻 입 니 다.메모리 에서 추출 하고 현재 예화 된 클래스 에 접근 합 니 다.그러면 static 은 그 클래스 를 대표 합 니 다.
외국인 의 전문 적 인 설명 을 살 펴 보 자.
self refers to the same class whose method the new operation takes place in.
static in PHP 5.3's late static bindings refers to whatever class in the hierarchy which you call the method on.
In the following example, B inherits both methods from A. self is bound to A because it's defined in A's implementation of the first method, whereas static is bound to the called class (also see get_called_class() ).
상위 코드:

class Person {
public static function get_self() {
return new self();
}
public static function get_static() {
return new static();
}
}
class WangBaoqiang extends Person{}
echo get_class(WangBaoqiang::get_self()); // Person
echo get_class(WangBaoqiang::get_static()); // WangBaoqiang
echo get_class(Person::get_static()); // Person
하지만 하위 클래스 에 get 을 사용 하고 싶다 면class 에서 돌아 오 는 것 도 현재 하위 클래스 의 이름('wangbaoqiang')입 니 다.어떻게 해 야 합 니까?

<?php
class Person {
public function create1() {
$class = get_class($this);
    return new $class();
}
public function create2() {
return new static();
}
}
class WangBaoqiang extends Person {
}
$wangBaoQiang = new WangBaoqiang();
var_dump(get_class($wangBaoQiang->create1()), get_class($wangBaoQiang->create2()));
/*
The result 
string(1) "WangBaoqiang"
string(1) "WangBaoqiang"
*/
위 에서 말 한 것 은 편집장 님 께 서 소개 해 주신 PHP 의 new static()과 new self()의 비교 입 니 다.여러분 께 도움 이 되 셨 으 면 좋 겠 습 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기