$this->가 '현재 객체'를 의미한다면, self::는 '현재 클래스'의 정적 멤버를 호출할 때 씁니다.
차이점: 상속 관계에서 자식 클래스의 오버라이딩을 무시하고 코드가 작성된 바로 그 클래스의 멤버를 고정해서 호출합니다.
class Burger {
public static $type = "치즈버거";
public function getType() {
return self::$type; // 현재 클래스의 정적 변수 호출
}
}
class 밖에서는 작동 안 함
// ❌ 클래스 밖 - 사용 불가
const ALLOWED_MIDS = ['php', 'laravel'];
echo self::ALLOWED_MIDS; // 에러 발생!
// ✅ 클래스 안 - 사용 가능
class BoardController
{
private const ALLOWED_MIDS = ['php', 'laravel'];
public function test() {
var_dump(self::ALLOWED_MIDS); // 정상 동작
}
}
$this-> → 변수 (바뀔 수 있는 값)
self:: → 상수 (절대 안 바뀌는 값)
둘 다 클래스 안에서만 동작하고, 클래스 안의 것을 참조한다는 점은 같습니다.