Magic Constants & Method

이하루·2024년 7월 30일

PHP는 미리 정의된 상수와 메서드가 있다. 각각의 역할을 알아보자.

🔎 Magic Constants

1. __DIR__

현재 파일이 위치한 디렉토리의 절대경로를 반환한다.

2. __FILE__

현재 파일의 절대경로를 반환한다.

3. __LINE__

현재 코드의 줄번호를 반환한다.

4. __FUNCTION__

현재 실행중인 함수명을 반환하며, 함수 이외의 위치는 빈 문자열을 반환한다.

5. __METHOD__

현재 실행중인 메서드명을 반환하며, 메서드 이외의 위치는 빈 문자열을 반환한다.

6. __CLASS__

현재 실행중인 클래스명을 반환하며, 클래스 이외의 위치는 빈 문자열을 반환한다.

7. __NAMESPACE__

현재 네임스페이스를 반환하며, 네임스페이스가 정의되지 않은 위치는 빈 문자열을 반환한다.

🔎 Magic Method

Magic Method는 PHP가 기본적으로 지원하는 클래스 내부에서 사용할 수 있는 매서드이다.

1. __call()

정의되지 않은 동적 메서드가 호출될 때 실행되는 메서드
(new키워드로 객체 생성, 호출시 실행)

class A
{
	// $name : 호출된 메서드명, $array : 호출시 정의된 매개변수의 배열
    public function __call($name, $array) {
        echo $name . " " . $array[0];
    }
}

$a = new A();
$a->test('arguments'); // test arguments
// A::test('arguments'); ← 불가

2. __callStatic()

정의되지 않은 정적 메서드가 호출될 때 실행되는 메서드
(::키워드로 객체 호출시 실행)

class A
{
	// $name : 호출된 메서드명, $array : 호출시 정의된 매개변수의 배열
    public static function __callStatic($name, $array) {
        echo $name . " " . $array[0]; // test arguments
    }
}

A::test('arguments'); // test arguments

3. __construct()

객체 생성시 호출되는 생성자 메서드

class A {
    public function __construct() {
        echo "__construct";
    }
}
$a = new A(); // __construct

4. __destruct()

객체 소멸시 호출되는 소멸자 메서드

class A {
    public function __destruct() {
        echo "__destruct";
    }
}
$a = new A();
unset($a); // __destruct

5. __set() & __get()

정의되지 않은 속성에 값을 설정, 호출할 때 실행되는 메서드

class A {
    private $data = [];
    
    // $name : 설정한 속성의 이름, $value : 설정한 속성의 값
    public function __set($name, $value) {
        $this->data[$name] = $value;
    }
    // $name : 설정한 속성의 이름
	public function __get($name) {
		return $this->data[$name] ?? 'no data';
    }
}
$a = new A();
$a->key = 'value'; // = $this->__set('key', 'value');
echo $a->key; // = $this->__get('key');

6. __isset() & __unset()

정의되지 않은 속성을 검사(isset empty)할때 호출 (__isset())
정의되지 않은 속성을 제거(unset)할때 호출 (__isset())

class A {
    // $name : 설정한 속성의 이름
    public function __isset($name) {
        return $name;
    }
    // $name : 설정한 속성의 이름
	public function __unset($name) {
        return $name;
    }
}
$a = new A();
var_dump(isset($a->key1)); // = $this->__isset('key1');
var_dump(empty($a->key2)); // = $this->__isset('key2');
var_dump(unset($a->key3)); // = $this->__unset('key3');

7. __toString()

객체를 문자열로써 출력하고자 할 경우, 호출되는 메서드 (echo, print)

class A {
    public function __toString() {
        return "print string";
    }
}
$a = new A();
echo $a; // $a->__toString();

8. __invoke()

객체가 함수처럼 호출될 때 호출되는 메서드

class MyClass {
    // $name : 정의된 매개변수의 배열
    public function __invoke($array) {
        echo "invoke";
    }
}
$a = new MyClass();
$a('test'); // $a->__invoke(['test']);

9. __debugInfo()

객체를 var_dump할 시, 디버깅 정보를 반환하는 메서드

class MyClass {
    private $data = ['key' => 'value'];
    
    public function __debugInfo() {
        return ['data' => $this->data];
    }
}
$obj = new MyClass();
// Output: array(1) { ["data"]=> array(1) { ["key"]=> string(5) "value" } }
var_dump($obj);  
profile
어제보다 더 나은 하루

0개의 댓글