소개
클래스 내부에 선언된 데이터 멤버를 속성(property)이라고 합니다. 속성은 문맥에 따라 애트리뷰트(attribute) 또는 필드(field)라고도 불립니다. PHP에서 속성은 반드시 접근 제한자 키워드인 public, private, protected 중 하나로 한정해야 합니다. 속성의 이름은 PHP에서 유효한 라벨이라면 무엇이든 사용할 수 있으며, 속성의 값은 클래스의 인스턴스마다 서로 다를 수 있기 때문에 인스턴스 변수라고도 부릅니다.
인스턴스 메서드 내부에서는 의사 변수(pseudo-variable)인 $this가 제공하는 객체 컨텍스트를 통해 속성에 접근할 수 있습니다. 속성이 public으로 선언된 경우에는 객체 외부에서 -> 연산자를 사용해 접근할 수 있습니다. 반면 static 키워드로 정의된 속성은 그 값이 클래스의 모든 객체 간에 공유되며, 범위 해결 연산자 (::)와 클래스 이름을 사용해 접근합니다.
속성 선언 및 접근
다음 예제는 속성을 정의하고 접근하는 기본적인 방법을 보여줍니다.
예제
<?php
class myclass{
private $fname="Kiran";
public $mname="Pratap";
static $lname="Singh";
function dispdata(){
echo "$this->fname\n";
echo "$this->mname\n";
echo myclass::$lname;
}
}
$obj=new myclass();
$obj->dispdata();
?>출력 결과
위 코드의 실행 결과는 다음과 같습니다.
Kiran Pratap Singh
클래스 외부에서는 public으로 선언된 인스턴스 속성만 객체를 통해 접근할 수 있으며, private 속성은 외부에서 접근할 수 없습니다. 참고로 이전 버전의 PHP에서는 var 키워드로 속성을 선언할 수 있었는데, 현재는 공식적으로 권장되지 않지만 하위 호환성을 위해 여전히 사용 가능하며 public 선언과 동일하게 취급됩니다.
속성 타입 선언 (PHP 7.4 이상)
PHP 7.4부터는 속성 변수에 타입 선언(type declaration)을 사용할 수 있습니다. 이를 통해 속성에 할당되는 값의 자료형을 강제할 수 있어 코드의 안정성과 가독성이 크게 향상됩니다.
예제
<?php
class myclass{
private string $name;
private int $age;
function setdata(string $x, int $y){
$this->name=$x;
$this->age=$y;
}
}
$obj=new myclass();
$obj->setdata("Kiran",20);
?>타입이 지정된 속성은 값을 초기화하기 전에 읽으려고 하면 오류가 발생하므로, 위 예제처럼 setdata() 메서드를 통해 반드시 먼저 값을 할당해야 합니다.