이번엔 멤버변수와 접근제어자에 대해 정리해보겠습니다.
멤버변수는 클래스에 속하는 변수입니다.
php 3,4 버전에서는 이를 variable 이라고 불렀지만 5버전 부터는 class member 라고 하고 7버전 에서는 property 라고 합니다. 즉, 변수/멤버변수/클래스멤버/프로퍼티 는 전부 같은 뜻이라고 보면 되겠습니다.
최신 용어가 property 이므로 프로퍼티라는 용어를 사용하도록 하겠습니다.
클래스에 속하는 변수이기 때문에 클래스에 속하는 모든 메소드에서 사용이 가능한 변수입니다.
프로퍼티의 특징은 초기화가 필요 없다는 것 입니다.
프로퍼티를 선언하고 값을 할당하지 않으면 자동으로 null값이 할당됩니다.
또한 클래스에서 선언한 프로퍼티와 같은 이름으로 지역변수를 선언할 수 있으며 이렇게 선언한 지역변수는 당연히 중괄호('{}') 안에서만 유효합니다.
코드로 확인해보겠습니다.
<?php
class Property{
public $a;
public $b="123";
function __construct(){
$a = "1";
$b = "2";
echo "$a, $b"."<br/>";
}
}
$instance1 = new Property();
echo "초기화하지 않은 프로퍼티 : {$instance1->a} <br/>";
echo "초기화 한 프로퍼티 : {$instance1->b}";
?>
Property 라는 클래스를 생성했습니다.
public이 일단 뭔지 모르지만 public 으로 하여 a,b 프로퍼티를 만들었고 a는 값을 할당하지 않고, b는 할당했습니다.
생성자를 만들어 클래스의 프로퍼티와 같은 문자로 지역변수를 생성하여 값을 할당하고 echo로 출력합니다.
이 후 instance1 이라는 인스턴스를 Property 라는 클래스를 통해 생성하였으며 $instance1->a,b 로 각 프로퍼티에 접근한 값을 echo로 출력합니다.
인스턴스가 생성되면서 생성자(__construct)가 호출됩니다.
생성자에 작성된 지역변수 $a,$b 값이 출력되었고 그 다음 프로퍼티에 대한 값이 출력됩니다.
$a는 값을 초기에 할당하지 않았으므로 null 이며, $b는 123이 할당되었으므로 위와 같은 내용을 볼 수 있습니다.
이번엔 접근 제어자에 대해 정리해보겠습니다.
접근 제어자는 클래스와 클래스 간, 패키지와 패키지간의 접근 권한을 지정하는 예약어입니다.
1) private
동일한 클래스 내에서만 접근할 수 있습니다.
<?php
class A{
private $a = "private";
}
$instance1 = new A();
echo "{$instance1->a}";
?>
A 라는 클래스에서 a라는 프로퍼티를 private 으로 생성한 후 클래스의 바깥에서 a 프로퍼티를 접근한 것입니다.
결과는 당연히 error 입니다.
클래스 내에서만 접근이 가능하기 때문입니다.
2) protected
동일한 패키지와 하위 클래스에서 접근할 수 있습니다.
<?php
class A{
protected $a = "123";
}
class B extends A{
function echoo(){
echo $this->a;
}
}
$instance1 = new B();
$instance1->echoo();
?>
B 클래스는 A클래스를 상속받습니다.
프로퍼티 a를 출력하는 메소드인 echoo를 B에서 작성하였습니다.
protected 로 A클래스에서 생성한 프로퍼티를 참조하여 echoo 메소드가 잘 동작하는 것을 확인할 수 있습니다.
3) public
동일한 클래스와 동일한 패키지는 물론 외부 패키지에서도 접근할 수 있습니다.
<?php
class A{
public $a = "123";
}
$instance1 = new A();
echo "$instance1->a";
?>
별다른 메소드를 생성하지 않고 클래스 밖에서 화살표를 통해 바로 접근이 가능한 것을 볼 수 있습니다.
여기서 잠깐 부연설명 하자면 -> 이 화살표의 의미는 메소드나 프로퍼티에 접근(사용)하기위해 사용하는 기호입니다.
'php' 카테고리의 다른 글
클래스 및 객체(8) (0) | 2021.08.20 |
---|---|
클래스 및 객체(7) (0) | 2021.08.19 |
클래스 및 객체(5) (0) | 2021.08.17 |
클래스 및 객체(4) - $this-> 의 이해 (0) | 2021.08.05 |
클래스 및 객체(3) (0) | 2021.08.05 |