PHP 정적 변수의 속성과 방법, 지연 바인딩 사용법에 대한 자세한 설명

伊谢尔伦
풀어 주다: 2023-03-12 06:50:01
원래의
1543명이 탐색했습니다.

정적 변수의 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!