PHP에서 self와 static의 차이점은 무엇입니까

青灯夜游
풀어 주다: 2023-03-09 14:20:02
원래의
2995명이 탐색했습니다.

PHP에서 self와 static의 차이점: self는 현재 클래스의 메서드만 참조할 수 있는 반면 static은 함수 호출을 통해 런타임에 호출 클래스의 메서드를 바인딩할 수 있습니다.

PHP에서 self와 static의 차이점은 무엇입니까

이 튜토리얼의 운영 환경: Windows 7 시스템, PHP 버전 7.1, DELL G3 컴퓨터

php에서 self와 static의 차이점

몇 가지 예를 통해 self와 static의 차이점을 쉽게 확인할 수 있습니다. . Car 클래스가 있다고 가정합니다. 여기에는 model과 getModel이라는 두 가지 메소드가 있습니다. 여기서는 self 키워드를 사용합니다.

class Car
{
    public static function model()
    {
         self::getModel();
    }

    protected static function getModel()
    {
        echo "I am a Car!";
    }

}
로그인 후 복사

정적 메소드

Car::model();
로그인 후 복사

를 호출하고 출력을 얻습니다.

I am a Car!
로그인 후 복사

키워드 self는 Car 클래스의 getModel 메소드를 호출하고 "I am a Car!"라는 텍스트를 출력하게 합니다.

다음으로 Car 클래스를 상속하는 새로운 클래스 Mercedes 클래스를 추가합니다. 코드는 다음과 같습니다.

class Mercedes extends Car{

    protected static function getModel()
    {
        echo "I am a Mercedes!";
    }

}
로그인 후 복사

Mercedes::model()을 호출하면 결과가 어떻게 될까요?
아마도 결과는 다음과 같습니다:

I am a Mercedes!
로그인 후 복사
로그인 후 복사

하지만 실제 출력은 다음과 같습니다.

I am a Car!
로그인 후 복사

이게 왜일까요?

self에 대한 설명

키워드 "self"의 작동 원리는 현재 클래스(현재 클래스)의 메서드를 호출한다는 것입니다. 모델 메소드는 Car 클래스에만 정의되어 있으므로 현재 클래스는 Car 클래스입니다. 모델의 Self::getModel()은 자연스럽게 Car 클래스의 getModel 메소드를 호출합니다.

이 동작은 우리가 원하는 동작이 아닌 것 같고 객체지향 디자인 원칙에도 부합하지 않습니다. 어떻게 해결하나요? static 키워드를 사용할 수 있습니다.

정적 키워드 및 후기 정적 바인딩

PHP5.3에는 지연된 정적 바인딩이라는 새로운 기능이 추가되었습니다. 이는 다형성을 달성하고 위의 문제를 해결하는 데 도움이 될 수 있습니다. 간단히 말해서 지연된 정적 바인딩은 static 키워드를 사용하여 상속된 메서드를 호출하면 런타임에 호출 클래스에 바인딩된다는 의미입니다. 위의 예에서 지연된 정적 바인딩(정적)을 사용하면 "Mercedes::model();"을 호출할 때 Mercedes 클래스의 getModel 메서드가 호출된다는 의미입니다. 왜냐하면 Mercedes는 우리의 소집반이기 때문입니다. 지연 바인딩의 예

class Car{
    public static function model()
    {
         static::getModel();
    }    protected static function getModel()
    {
        echo "I am a Car!";
    }

}
로그인 후 복사

Car 클래스의 self를 static으로 대체하고 Mercedes 클래스는 수정하지 않았습니다.

이제

Mercedes::model();
로그인 후 복사

를 호출하여 출력을 얻습니다.

I am a Mercedes!
로그인 후 복사
로그인 후 복사

PHP 5.3 이하 버전에서는 지연된 정적 바인딩을 사용할 수 없습니다.

PHP 5.3 이전 버전에서는 지연된 정적 바인딩을 사용할 수 없습니다. PHP 5.3 이하 버전에서 위 예제를 실행하려고 하면 오류가 보고됩니다.

php

self 및 static in php

이제 예제에서 self를 static으로 바꾸면 self는 현재 클래스의 메서드를 참조하는 반면 static은 호출 클래스의 메서드 바인딩을 허용한다는 점을 알 수 있습니다. 런타임에.

추천 학습: "PHP 비디오 튜토리얼"

위 내용은 PHP에서 self와 static의 차이점은 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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