>  기사  >  백엔드 개발  >  PHP 새 정적 및 새 자체에 대한 자세한 설명

PHP 새 정적 및 새 자체에 대한 자세한 설명

高洛峰
高洛峰원래의
2017-02-21 15:29:431196검색

현재 메서드가 정의된 클래스에 따라 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.selfnew selfnew 키워드가 있는 클래스를 반환합니다. 예를 들어 다음 예에서는

public static function getSelf() {
  return new self(); // new 关键字在 Father 这里
 }

입니다. Father을 반환합니다.

new static

2.static 위의 내용을 바탕으로 조금 더 똑똑해졌습니다. staticnew static()을 실행하는 클래스를 반환합니다. 예를 들어 Son는 반환되는 것은 get_class(Son::getStatic())이고, SonFather을 실행하고, 반환되는 것은 get_class(Father::getStatic())Father

이라고 생각하면 된다. 동일한 결과를 반환합니다.

new self팁: 좋은 IDE를 사용하면 댓글을 직접 읽을 수 있습니다. 예를 들어 PhpStorm은 다음과 같습니다. new static

PHP 새 정적 및 새 자체에 대한 자세한 기사를 보려면 PHP 중국어 웹사이트에 주목하세요! PHP new static 和 new self详解

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