이 글은 주로 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 = 'This is a Vehicle'; public static function what_vehicle() { echo get_called_class()."\n"; echo self::$name; } } class Sedan extends Vehicle { protected static $name = 'This is a Sedan'; } Sedan::what_vehicle();
프로그램 출력:
코드는 다음과 같습니다.
SedanThis is a Vehicle
정적 예:
코드는 다음과 같습니다.
<?php class Vehicle { protected static $name = 'This is a Vehicle'; public static function what_vehicle() { echo get_called_class()."\n"; echo static::$name; } } class Sedan extends Vehicle { protected static $name = 'This is a Sedan'; } Sedan::what_vehicle();
프로그램 출력:
코드는 다음과 같습니다.
Sedan This is a Sedan
요약: 위 내용은 이 글의 전체 내용입니다. 모든 분들의 학습에 도움이 되길 바랍니다.
관련 권장 사항:
스누피 클래스를 사용하여 HTML 파일을 구문 분석하는 방법
게시 요청을 시뮬레이션하기 위한 PHP의 세 가지 일반적인 용도
위 내용은 PHP의 static 키워드 정의, 후기 바인딩 및 self 키워드와의 차이점의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!