정적 변수의 type 키워드는 static입니다. 이 글은 주로 PHP에서 정적 속성과 정적 메서드를 사용하는 방법과 지연 바인딩뿐만 아니라 기본 예제에 대해 설명합니다.
Static(정적) 키워드는 정적 메서드와 속성을 정의하는 데 사용되며, static은 정적 변수와 속성을 정의하는 데에도 사용할 수 있습니다. 후기 정적 바인딩 설정.
1. 정적 변수 정적 변수
정적 변수는 로컬 함수 범위에만 존재하지만 프로그램 실행이 이 범위를 벗어나면 해당 값이 손실되지 않습니다. 즉, 다음에 이 함수가 실행될 때 변수는 원래 값을 계속 기억합니다. 변수를 정적으로 정의하려면 변수 앞에 static 키워드를 추가하면 됩니다.
function testing() { static $a = 1; $a *= 2; echo $a."\n"; } testing(); testing(); testing(); testing(); /** * 2 * 4 * 8 * 16 * [Finished in 0.1s] */
정적 변수는 재귀 함수를 처리하는 방법도 제공합니다. 재귀 함수는 자기 자신을 호출하는 함수입니다. 재귀 함수를 작성할 때는 무기한 재귀될 수 있으므로 주의하세요. 재귀를 종료하는 적절한 방법이 있는지 확인해야 합니다.
이 예에서 테스트() 함수는 각 실행 후 $a 변수의 값을 내부적으로 저장합니다. 다음에 test()가 호출되면 $a의 값이 복원되고 test()는 이 값에 2를 곱하여 인쇄합니다. 변수의 초기 기본값은 1이며 이 할당은 변수가 처음 초기화될 때만 발생합니다. 이 작업은 함수를 실행할 때마다 호출되지 않습니다.
2. 클래스에서 정적 요소 사용
클래스에서 static 키워드는 두 가지 주요 용도로 사용됩니다. 하나는 정적 멤버를 정의하는 데 사용되고 다른 하나는 정적 메서드를 정의하는 데 사용됩니다. 클래스 속성이나 메서드를 static으로 선언하면 클래스를 인스턴스화하지 않고도 직접 액세스할 수 있습니다. 정적 속성은 인스턴스화된 클래스의 개체를 통해 액세스할 수 없습니다(그러나 정적 메서드는 가능함). -> 연산자를 통해 객체에서 정적 속성에 액세스할 수 없습니다. 클래스 내에서 범위 한정 연산자를 사용하여 다양한 범위 수준의 변수에 액세스할 수 있습니다. 2.1,
정적 속성정적 메서드는 객체를 통해 호출할 필요가 없으므로 정적 메서드에서는 의사 변수 $this를 사용할 수 없습니다. 정적 변수는 클래스의 인스턴스가 아닌 전체 클래스에 속하는 것으로 생각할 수 있습니다. 일반 인스턴스 변수와 달리 정적 속성은 하나의 변수 값만 유지하며 이 변수 값은 모든 인스턴스에 유효합니다. 즉 모든 인스턴스가 이 속성을 공유한다는 의미입니다.
class MyObject { public static $a = 0; function MyMethod() { self::$a += 2; echo self::$a . "\n"; } } $instance1 = new MyObject(); $instance1 -> MyMethod(); $instance2 = new MyObject(); $instance2 -> MyMethod(); /** * * 2 * 4 * [Finished in 0.1s] * */
$이 포인터는 클래스의 현재 인스턴스이며 호출 개체에 대한 참조입니다.
self::는 클래스 자체를 나타냅니다. self:: 범위
한정자를 사용할 때는 연산자 뒤에 $ 기호를 추가해야 합니다. 이 연산자는 클래스 외부의 코드에서 사용할 수 없으며 위치를 식별할 수 없습니다. 상속 트리 계층 구조. 확장 클래스에서 self:: 범위를 사용하는 경우 self는 기본 클래스에 선언된 메서드를 호출할 수 있지만 항상 확장 클래스에서 재정의된 메서드를 호출합니다. parent:: 확장 클래스에서 기본 클래스 메서드가 재정의될 때 기본 클래스 메서드에 액세스하려면 parent::
static::을 사용하면 더 이상 self::를 사용할 필요가 없습니다. 그리고 부모:: . 기능을 구현하는 최종 클래스를 가리키고 싶을 때 static을 사용할 수 있습니다. 이 한정자는 코드가 실행되기 직전에 상속 계층 구조에서 마지막 클래스의 멤버를 계산합니다.
2.3,
정적 메서드정적 메서드의 규칙은 정적 변수와 동일합니다. 메서드는 static 키워드를 사용하여 정적으로 표시할 수 있으며, 정적 메서드는 클래스 이름과 범위 지정 연산자(::)를 통해 액세스할 수 있습니다.
정적 메서드와 비정적 메서드 사이에는 중요한 차이점이 있습니다. 즉, 정적 메서드를 호출할 때 더 이상 클래스 인스턴스를 소유할 필요가 없습니다.
class MyObjectBase { static function MyMethod() { static::MyOtherMethod(); } static function MyOtherMethod() { echo 'called from MyObject.'; } } class MyExtendObject extends MyObjectBase { static function MyOtherMethod() { echo 'called from MyExtendObject.'; } } MyExtendObject::MyMethod();
위의 예제 코드는 MyExtendObject에서 MyOtherMethod 메서드를 올바르게 호출하고 MyExtendObject에서 호출된 출력을 제공합니다.
메서드에 $this 변수가 포함되어 있지 않으면 이 메서드는 정적 메서드여야 합니다. 클래스 인스턴스가 필요하지 않은 경우 인스턴스화의 필요성을 제거하는 정적 클래스도 사용해야 합니다. 또한 $this 변수는 정적 메서드에서 사용할 수 없습니다. 정적 메서드는 특정 인스턴스에 속하지 않기 때문입니다.
2.4,
Lazy 바인딩static::을 사용하면 self:: 및 parent::를 사용할 필요가 없습니다. 기능을 구현하는 최종 클래스를 가리키고 싶을 때 static을 사용할 수 있습니다. 이 한정자는 코드가 실행되기 직전에 상속 계층 구조에서 마지막 클래스의 멤버를 계산합니다. 이 프로세스를 지연된 바인딩이라고 합니다.
3.
요약정적 변수를 생성하고 기본 초기화 값을 제공하려면 static 키워드를 사용하세요. 정적 변수는 함수가 실행된 후에도 값이 변경되지 않는 수정된 함수 변수입니다.
static 키워드는 클래스에서 속성 및 메서드를 수정하는 데 사용할 수도 있습니다. 속성에 사용하면 속성이 더 이상 특정 인스턴스에 대한 값을 보유하지 않고 대신 전체 클래스 자체에 대한 값을 보유하게 되며 정적 속성을 멤버 간에 공유할 수 있습니다.
정적 메서드에 액세스하려면 범위 한정자라고 하는 (::)를 사용할 수 있습니다. 이 연산자의 왼쪽은 클래스 이름이거나 미리 정의된 범위일 수 있습니다. 미리 정의된 범위에는 자체 상위 정적이 포함됩니다. 연산자의 오른쪽은 정적 메서드와 속성입니다.
위 내용은 PHP 정적 변수의 속성과 방법, 지연 바인딩 사용법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!