Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP 범위 해결 연산자(::)의 개념과 사용법 총정리


개요

PHP에서 이중 콜론 ::범위 해결 연산자(Scope Resolution Operator)로 정의됩니다. 이 연산자는 클래스 수준에서 정의된 상수, 정적 프로퍼티(속성), 메서드에 접근할 때 사용됩니다. 클래스 정의 외부에서 이러한 요소들을 참조할 때는 클래스 이름과 함께 범위 해결 연산자를 사용합니다. 참고로 이 연산자는 Paamayim Nekudotayim이라고도 불리는데, 히브리어로 '이중 콜론(double colon)'을 의미합니다.

기본 문법

클래스 외부에서 상수나 정적 멤버에 접근하려면 클래스 이름 뒤에 ::을 붙이고 접근하고자 하는 멤버를 지정합니다. 또한 클래스 이름이 담긴 변수를 통해서도 동일하게 접근할 수 있습니다.

<?php
class A{
    const PI=3.142;
    static $x=10;
}
echo A::PI;      // 상수 접근
echo A::$x;      // 정적 프로퍼티 접근
$var='A';
echo $var::PI;   // 변수에 담긴 클래스명으로 접근
echo $var::$x;
?>

클래스 내부에서의 사용

클래스 내부의 메서드 안에서 클래스 수준의 상수나 정적 프로퍼티에 접근하려면 self 키워드를 사용합니다. self는 현재 클래스 자신을 가리키며, 인스턴스 생성 없이 정적 멤버에 접근할 수 있게 해줍니다.

<?php
class A{
    const PI=3.142;
    static $x=10;
    static function show(){
        echo self::PI . self::$x;
    }
}
A::show();
?>

자식 클래스에서의 사용

부모 클래스의 메서드가 자식 클래스에서 오버라이드(재정의)되었을 때, 재정의된 메서드 내부에서 원래 부모 클래스의 메서드를 호출해야 하는 경우가 있습니다. 이때는 parent 키워드와 함께 범위 해결 연산자를 사용하여 부모 메서드를 호출합니다.

예제

<?php
class testclass{
    public function sayhello(){
        echo "Hello World\n";
    }
}
class myclass extends testclass{
    public function sayhello(){
        parent::sayhello();  // 부모 클래스의 메서드 호출
        echo "Hello PHP";
    }
}
$obj=new myclass();
$obj->sayhello();
?>

실행 결과

위 코드를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.

Hello World
Hello PHP

정리

PHP의 범위 해결 연산자(::)는 크게 세 가지 상황에서 활용됩니다. 첫째, 클래스 외부에서 상수나 정적 멤버에 접근할 때 클래스 이름과 함께 사용하고, 둘째, 클래스 내부 메서드 안에서는 self 키워드와 함께 사용하고, 셋째, 오버라이드된 메서드에서 부모 클래스의 메서드를 호출할 때는 parent 키워드와 함께 사용합니다. 이 세 가지 패턴을 익혀두면 객체 지향 PHP 프로그래밍에서 정적 멤버와 상속 구조를 훨씬 효율적으로 다룰 수 있습니다.