객체 지향 프로그래밍의 기본을 PHP로 배우는 데 도전하고 계신가요? 이 주제의 중심에는 특별한 참조인 $this와 self가 있습니다. 이 두 키워드는 PHP에서 객체와 클래스를 다루는 데 있어 매우 중요하며, 인스턴스 변수 및 상수에 대한 통신과 접근을 제어합니다. 함께 이 개념들의 차이점과 사용법을 살펴봅시다.
주요 발견 사항
- $this는 현재 객체에 대한 참조이며 인스턴스 메서드에서 사용됩니다.
- self는 현재 클래스를 가리키며, 정적 속성과 메서드 및 상수에 접근하는 데 사용됩니다.
- $this와 self의 차이는 PHP에서 객체 지향 프로그래밍을 이해하는 데 있어 근본적입니다.
$this 참조 이해하기
먼저 $this 키워드에 대해 알아보겠습니다. $this는 현재 객체를 참조하는 특별한 변수입니다. 인스턴스 메서드 내에서 $this에 접근하면, 해당 특정 객체의 모든 인스턴스 변수와 메서드에 접근할 수 있습니다.

예를 들어, 데이터베이스 클래스가 있다고 가정해 보겠습니다. 이 클래스의 메서드 내에서 User나 Pass와 같은 인스턴스 변수에 접근할 수 있습니다. 이는 $this->User 또는 $this->Pass를 통해 이루어집니다. 이러한 변수는 각각의 객체의 컨텍스트에서만 존재하기 때문에 $this가 중요합니다.
$this는 항상 현재 객체를 가리키는 보편적인 참조라는 것을 아는 것이 중요합니다. 추가 객체가 존재할 경우, $this는 코드가 위치한 특정 객체를 참조하게 됩니다.
키워드 self 자세히 알아보기
반면, self 키워드는 인스턴스에 제한되지 않습니다. 이는 클래스 자체를 가리키며, 클래스를 통해 정적 속성과 상수에 접근할 수 있게 해줍니다. 다시 데이터베이스 클래스를 살펴보겠습니다. 이 클래스 내에서 상수를 정의했다고 가정해 보겠습니다. self::상수 를 사용하여 이 상수에 접근할 수 있습니다.

self는 주로 정적 메서드와 속성에 유용하다는 점에 유의하세요. 이러한 변수는 클래스 인스턴스 전체에 대해 한 번만 존재하며, 개별 객체에 대해 존재하지 않습니다. 이는 인스턴스 변수와의 기본적인 차이점입니다.
물론, 클래스의 메서드 내에서 정적 메서드 또는 상수에 접근하려는 경우도 있습니다. 이러한 경우, self::메서드()를 사용하여 클래스에서 접근이 이루어지도록 해야 하며, 인스턴스를 통해 이루어지지 않도록 해야 합니다.

실용적인 예제 만들기
SIS 클래스를 만들고 싶다고 가정해 보겠습니다. 다음은 두 참조의 사용을 시연하는 간단한 예제입니다.

이 클래스 내에서 우리는 정적 속성과 메서드를 정의할 수 있습니다. 예를 들어, name이라는 인스턴스 변수를 사용하는 getName()라는 메서드가 있다고 가정해 봅시다. 이 인스턴스 변수에 접근하려면 $this->name을 사용합니다.

그러나 클래스에 정의된 상수 KEY_PATH에 접근하려면 self::KEY_PATH를 사용해야 합니다. 이는 상수 접근 시 인스턴스 충돌이 발생하지 않도록 보장합니다.
마지막으로 echo를 사용하여 참조가 작동함을 보여줍니다. 인스턴스 변수와 상수 값을 문제없이 출력하여 정확하게 참조되고 있음을 증명할 수 있습니다.

요약 – PHP에서 $this와 self 이해하기
오늘의 글에서는 PHP의 객체 지향 프로그래밍에서 $this와 self의 사용 및 차이점의 기초를 배웠습니다. $this는 현재 객체를 가리키고, self는 클래스 자체를 목표로 합니다. 이 개념들은 PHP에서 효과적인 개발을 위해 매우 중요합니다.
자주 묻는 질문
$this와 self의 차이점은 무엇인가요?$this는 현재 객체를 참조하고, self는 클래스 자체를 가리킵니다.
$this는 언제 사용해야 하나요?인스턴스 변수나 메서드에 접근하려는 경우 $this를 사용하세요.
self는 언제 유용한가요?self는 클래스의 정적 속성이나 상수에 접근할 때 유용합니다.
self에 대한 특별한 경우가 있나요?네, self는 정적 메서드 내에서 클래스 멤버에 접근할 때 유용합니다.
인스턴스 변수에 올바르게 접근하고 있는지 어떻게 확인하나요?$this->변수이름을 사용하여 인스턴스 특정 값에 접근하고 있는지 확인하세요.