>  기사  >  백엔드 개발  >  PHP의 static 키워드 정의, 후기 바인딩 및 self 키워드와의 차이점

PHP의 static 키워드 정의, 후기 바인딩 및 self 키워드와의 차이점

墨辰丷
墨辰丷원래의
2018-06-09 10:38:041349검색

이 글은 주로 PHP에서 static 키워드의 정의, late Binding, self 키워드와의 차이점을 소개하고 있으니 많은 분들에게 도움이 되었으면 좋겠습니다.

개요

저는 디자인 패턴을 배우고 있습니다. 이전에 싱글턴 패턴에 관한 기사가 있었습니다. 이 기사를 다시 읽어보니 static 키워드에 대한 저의 이해가 별로 신뢰가 가지 않아서 다시 복습하겠습니다.

정적 키워드

PHP의 정적 멤버와 메소드의 특징은 다음과 같습니다.

1. 정적 멤버는 클래스 인스턴스를 통해 액세스할 수 없지만 정적 메소드는 액세스할 수 있습니다.
2. 정적 멤버는 -> 연산자를 통해 액세스할 수 없습니다.
3. 정적 메서드 범위에서는 $this 키워드가 나타날 수 없습니다. 즉, 정적 메서드에서는 일반 멤버 변수에 액세스할 수 없습니다.
4. 객체를 인스턴스화하지 않고도 클래스 이름을 통해 정적 멤버 및 메서드에 직접 액세스할 수 있습니다.

후기 정적 바인딩

PHP 5.3.0부터 PHP에는 상속 범위에서 정적으로 호출된 클래스를 참조하는 데 사용되는 후기 정적 바인딩이라는 기능이 추가되었습니다.

정확하게 말하면 후기 정적 바인딩의 작동 원리는 이전 "비전달 호출"에 클래스 이름을 저장하는 것입니다. 정적 메서드 호출을 수행할 때 클래스 이름은 명시적으로 지정된 이름입니다(일반적으로 :: 연산자의 왼쪽에 있음). 비정적 메서드 호출을 수행할 때는 개체가 속한 클래스입니다. 소위 "전달 호출"은 self::, parent::, static:: 및 전달_정적_call() 방식으로 이루어진 정적 호출을 의미합니다. get_called_class() 함수를 사용하여 호출된 메서드의 클래스 이름을 가져올 수 있으며 static::은 해당 범위를 가리킵니다.


이 기능을 이해하려면

self vs static

데모를 사용하여 self와 static의 차이점을 직접 설명하는 매뉴얼의 예를 참조하세요.
자체 예:

코드는 다음과 같습니다.

<?php
class Vehicle {
    protected static $name = &#39;This is a Vehicle&#39;;
    public static function what_vehicle() {
        echo get_called_class()."\n";                
        echo self::$name;
    }
}
class Sedan extends Vehicle {
    protected static $name = &#39;This is a Sedan&#39;;
}
Sedan::what_vehicle();

프로그램 출력:

코드는 다음과 같습니다.

SedanThis is a Vehicle

정적 예:

코드는 다음과 같습니다.

<?php
class Vehicle {
    protected static $name = &#39;This is a Vehicle&#39;;
    public static function what_vehicle() {
        echo get_called_class()."\n";        
        echo static::$name;
    }
}
class Sedan extends Vehicle {
    protected static $name = &#39;This is a Sedan&#39;;
}
Sedan::what_vehicle();

프로그램 출력:

코드는 다음과 같습니다.

Sedan
This is a Sedan

요약: 위 내용은 이 글의 전체 내용입니다. 모든 분들의 학습에 도움이 되길 바랍니다.

관련 권장 사항:

스누피 클래스를 사용하여 HTML 파일을 구문 분석하는 방법

게시 요청을 시뮬레이션하기 위한 PHP의 세 가지 일반적인 용도

이벤트 메커니즘의 PHP 정의 및 구현

위 내용은 PHP의 static 키워드 정의, 후기 바인딩 및 self 키워드와의 차이점의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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