Language/PHP

클래스와 객체, 정적 멤버

yujindonut 2022. 9. 2. 18:31
728x90

인스턴스의 생성

클래스가 선언되고나면, 선언된 클래스로부터 인스턴스를 생성할 수 있다.

 

$객체이름 = new 클래스이름(인수1, 인수2, .. );

 

클래스 멤버에 접근

클래스 프로퍼티에 접근하거나 메소드를 호출할 때는 화살표 기호를 사용.

PHP에서는 프로퍼티, 메소드의 접근 범위를 제한할 수도 있으므로, 클래스 외부에서는 접근 제어자에 따라 접근이 가능할 수 있고 불가능할 수도 있다. 

 

$객체이름 -> 프로퍼티 이름;
$객체 이름-> 메소드 이름;

또한, 객체 내부에서 해당 인스턴스의 프로퍼티에 접근하고 싶을 때는 특별한 변수인 $this를 사용할 수 있다.

$this 변수는 해당 인스턴스가 바로 자기 자신을 가리키는데 사용하는 변수

$this -> 프로퍼티 이름;

 


public : 외부로 공개, 해당 객체를 사용하는 어디에서나 직접 접근이 가능

private: 선언된 멤버는 외부로 공개가 되지 않고, 해당 클래스의 멤버에서만 접근이 가능하다.

protected: 선언된 멤버는 상위 클래스에 대해서는 public 멤버처럼 취급되며, 외부에서는 private멤버처럼 취급된다.

해당 클래스의 멤버와 해당 클래스를 상속받은 자식 클래스에서만 접근이 가능하다. 

 

class ClassName
{
    public $publicVar;
    private $privateVar;

    protected $protectedVar;

 

    public function __constructor()
    {
        $this->publicVar = "public property<br>";

        $this->privateVar = "private property<br>";

        $this->protectedVar = "protected property<br>";

    }

 

    public function publicMethod()
    {
        echo "public method<br>";

    }
    protected function protectedMethod()
    {
        echo "protected method<br>";
    }
    private function privateMethod()
    {
        echo "private method<br>";
    }
}


$object = new ClassName();


echo $object->publicVar;      // 접근 가능
//echo $object->protectedVar; // 접근 불가능
//echo $object->privatev;     // 접근 불가능


$object->publicMethod();      // 호출 가능
//$object->protectedMethod(); // 호출 불가능
//$object->privateMethod();   // 호출 불가능

Static 키워드

정적 멤버의 특징

1. static 키워드로 선언된 정적 프로퍼티는 인스턴스화된 객체에서는 접근할 수 없다.

2. static 키워드로 선언된 정적 메소드는 인스턴스화된 객체에서도 접근할 수 있다.

3. 정적 메소드 내에서는 $this 의사 변수를 사용할 수 없다.

 

class StaticMember
{
    public static $staticProperty = "static property";
    public static function showProperty()
    {
        echo self::$staticProperty;."<br>";
    }
}

 

echo StaticMember::showProperty();  // 호출 가능

echo StaticMember::$staticProperty; // 접근 가능

 

$var = new StaticMember();          // 인스턴스 생성
echo $var->showProperty();          // 호출 가능

//echo $var->$staticProperty;       // 접근 불가능

 

범위 지정 연산자(::)

 

클래스의 프로퍼티나 메소드에 접근하기 위해서는 인스턴스를 생성하고 , 화살표 연산자(->)를 사용해야한다.

하지만, 단순히 클래스의 정의 내에서 프로퍼티나 메소드를 사용하고 싶을 때는 범위 지정 연산자(::)를 사용할 수 있다.

 

범위 지정 연산자(::)는 클래스의 상수, 정적(static) 멤버 또는 재정의된 멤버에 접근할 수 있게 해줍니다.

 

echo 다른클래스명::CONSTANT;

 

728x90