현재 메서드가 정의된 클래스에 따라 self:: 또는 __CLASS__를 사용하여 현재 클래스에 대한 정적 참조를 만듭니다. static:: 사용은 더 이상 현재 메서드가 정의된 클래스로 구문 분석되지 않습니다. 그러나 실제 런타임에 계산됩니다. 정적 메서드 호출에 사용할 수 있으므로(그러나 이에 국한되지는 않음) "정적 바인딩"이라고도 합니다.
최근 동영상 댓글에서 작은 질문을 받았습니다. 여기에서 self 대신 static을 사용하도록 선택할 때 특별히 고려해야 할 사항이 있나요? 아니면 다음과 같이 질문을 바꿀 수도 있습니다.
PHP의 새로운 정적과 새로운 자아는 정확히 무엇인가요?
사실 예를 보면 매우 명확해집니다.
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
클래스를 반환합니다.
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
팁: 좋은 IDE를 사용하면 댓글을 직접 읽을 수 있습니다. 예를 들어 PhpStorm은 다음과 같습니다. new static
PHP 새 정적 및 새 자체에 대한 자세한 기사를 보려면 PHP 중국어 웹사이트에 주목하세요!