>백엔드 개발 >PHP 튜토리얼 >PHP에서 이 자체 정적의 차이점

PHP에서 이 자체 정적의 차이점

不言
不言원래의
2018-04-14 17:14:312279검색

이 글은 주로 PHP에서 self static의 차이점을 소개합니다. 이제는 모든 사람과 공유합니다. 도움이 필요한 친구들은 이를 참조할 수 있습니다.

재인쇄: https://blog.csdn.net/ mrzhouxiaofei /article/details/78648079

Introduced

최근에 소프트웨어공학과 디자인을 하다가 문제에 부딪혔는데 라라벨 소스코드를 구해서 다시 찾아보니 그렇더군요. 셀프 정적에 대한 깊은 이해가 없었기 때문에 문제가 있었으니 다시는 같은 실수를 하지 않도록 녹음해 보세요.

Text

this

이것은 현재 개체를 가리키며 현재 개체의 비정적 변수 및 비정적 메서드에 액세스하는 데 사용됩니다.

<?phpclass Person {
    public $name;    public function getName() {
        echo $this->name;
    }
}$p = new Person();$p2 = new Person();$p->name = "小红";$p2->name = "小明";$p->getName();  // 小红$p2->getName();  // 小明

위의 예에서 두 객체는 ​​new. 이며 각각 객체의 name 속성을 설정합니다. 이는 getName()에서 현재 객체의 name 속성에 액세스하는 데 사용되므로 name 값이 각각 출력됩니다. 따라서 이는 현재 개체를 가리키며 다른 개체나 클래스를 가리키지 않습니다.

self

self는 클래스 자체를 가리키며 인스턴스화된 개체를 가리키지 않습니다. 일반적으로 클래스의 정적 변수 및 정적 메서드에 액세스하는 데 사용됩니다. 두 객체가 추가되고 수정됩니다. 한 객체의 name 속성과 다른 객체의 name 속성 값도 변경되었습니다. 따라서 self는 현재 클래스를 가리키며 모든 객체는 동일한 값을 공유합니다.

static

static은 self와 동일하며 둘 다 클래스를 가리키며 일반적으로 클래스의 정적 변수 및 정적 메서드에 액세스하는 데 사용되지만 구체적으로 어떤 클래스에서 self가 작성되는지, 어떤 클래스인지에 차이가 있습니다. 이것은 실제로 호출되는 클래스입니다. 정적은 상위 클래스에 작성되고 이 정적은 하위 클래스를 통해 사용됩니다. 이 정적은 공식적으로

후기 정적 바인딩

이라고 합니다.

<?phpclass Person {
    public static $name = "小红";    public static function getName() {
        echo self::$name;
    }
}$p = new Person();$p2 = new Person();$p::getName();  // 小红$p2::getName();  // 小红$p::$name = "小明";$p::getName();  // 小明$p2::getName();  // 小明
위의 예에서 볼 수 있듯이 self는 클래스 A에 작성되고 호출되면 클래스 A를 가리킵니다. static도 클래스 A에 작성되지만 클래스 B의 객체로 호출되면 클래스 A는 클래스 A를 가리킵니다. 클래스 B를 사용할 때 static은 자신이 가리키는 클래스를 결정합니다. 이것이

후기 정적 바인딩

입니다. 나중에 정적 바인딩

요약

이것은 현재 개체의 비정적 변수 및 비정적 메서드에 액세스하는 데 사용되는 현재 개체를 가리킵니다.

self는 일반적으로 정적 변수 및 정적 메서드에 액세스하는 데 사용되는 클래스를 가리킵니다.

static은 현재 클래스의 정적 변수 및 정적 메서드에 액세스하는 데 일반적으로 사용되는 클래스를 가리키지만
정적 호출에만 국한되지는 않습니다. 런타임 시 어떤 클래스를 가리키는지 결정합니다.
관련 권장 사항:

PHP에서 self, static 및 $this의 차이점과 후기 정적 바인딩에 대한 자세한 설명

위 내용은 PHP에서 이 자체 정적의 차이점의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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