현재 메서드가 정의된 클래스에 따라 현재 클래스에 대한 정적 참조에 self:: 또는 __CLASS__를 사용합니다. static:: 사용은 더 이상 현재 메서드가 정의된 클래스로 확인되지 않지만 계산됩니다. 실제 런타임에. 정적 메서드 호출에 사용할 수 있으므로(그러나 이에 국한되지는 않음) "정적 바인딩"이라고도 합니다.
최근 동영상 댓글에서 약간의 질문을 받았습니다. 여기에서 self 대신 static을 사용하도록 선택할 때 특별히 고려해야 할 사항이 있나요? 아니면 다음과 같이 질문을 바꿀 수도 있습니다:
PHP에서 new static과 new self는 정확히 무엇인가요?
사실, 예를 보면 매우 명확해집니다:
class Father { public static function getSelf() { return new self(); } public static function getStatic() { return new static(); } } class Son extends Father {} echo get_class(Son::getSelf()); // Father echo get_class(Son::getStatic()); // Son echo get_class(Father::getSelf()); // Father echo get_class(Father::getStatic()); // Father
이 점에 주의하세요. 여기에 있는 get_class(Son::getStatic());
는 다음과 같이 요약할 수 있는 Son
클래스를 반환합니다. get_class(Son::getStatic());
返回的是 Son
这个 class,可以总结如下:
new self
1.self
返回的是 new self
中关键字 new
所在的类中,比如这里例子的 :
public static function getSelf() { return new self(); // new 关键字在 Father 这里 }
始终返回 Father
。
new static
2.static
则上面的基础上,更聪明一点点:static
会返回执行 new static()
的类,比如 Son
执行 get_class(Son::getStatic())
返回的是 Son
, Father
执行 get_class(Father::getStatic())
返回的是 Father
而在没有继承的情况下,可以认为 new self
和 new static
self
반환 다음 예와 같이 new self
의 키워드 new
가 있는 클래스입니다. rrreee
는 항상 아버지
.
static
은 위 내용을 기반으로 조금 더 똑똑해졌습니다. static
은 new static()
클래스를 실행하기 위해 반환됩니다. 예를 들어 Son
은 get_class(Son::getStatic())
을 실행하고 Son
을 반환하고, Father
는 를 실행합니다. get_class(Father::getStatic())는 Father
를 반환합니다
위는 이 기사의 전체 내용입니다. 모든 사람의 학습에 도움이 되기를 바랍니다.
PHP에서 new self()과 new static()의 차이점 분석
self
🎜🎜🎜
위 내용은 PHP 새 정적 및 새 자체에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!