PHP는 미리 정의된 상수와 메서드가 있다. 각각의 역할을 알아보자.
현재 파일이 위치한 디렉토리의 절대경로를 반환한다.
현재 파일의 절대경로를 반환한다.
현재 코드의 줄번호를 반환한다.
현재 실행중인 함수명을 반환하며, 함수 이외의 위치는 빈 문자열을 반환한다.
현재 실행중인 메서드명을 반환하며, 메서드 이외의 위치는 빈 문자열을 반환한다.
현재 실행중인 클래스명을 반환하며, 클래스 이외의 위치는 빈 문자열을 반환한다.
현재 네임스페이스를 반환하며, 네임스페이스가 정의되지 않은 위치는 빈 문자열을 반환한다.
Magic Method는 PHP가 기본적으로 지원하는 클래스 내부에서 사용할 수 있는 매서드이다.
정의되지 않은 동적 메서드가 호출될 때 실행되는 메서드
(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'); ← 불가
정의되지 않은 정적 메서드가 호출될 때 실행되는 메서드
(::키워드로 객체 호출시 실행)
class A
{
// $name : 호출된 메서드명, $array : 호출시 정의된 매개변수의 배열
public static function __callStatic($name, $array) {
echo $name . " " . $array[0]; // test arguments
}
}
A::test('arguments'); // test arguments
객체 생성시 호출되는 생성자 메서드
class A {
public function __construct() {
echo "__construct";
}
}
$a = new A(); // __construct
객체 소멸시 호출되는 소멸자 메서드
class A {
public function __destruct() {
echo "__destruct";
}
}
$a = new A();
unset($a); // __destruct
정의되지 않은 속성에 값을 설정, 호출할 때 실행되는 메서드
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');
정의되지 않은 속성을 검사(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');
객체를 문자열로써 출력하고자 할 경우, 호출되는 메서드 (echo, print)
class A {
public function __toString() {
return "print string";
}
}
$a = new A();
echo $a; // $a->__toString();
객체가 함수처럼 호출될 때 호출되는 메서드
class MyClass {
// $name : 정의된 매개변수의 배열
public function __invoke($array) {
echo "invoke";
}
}
$a = new MyClass();
$a('test'); // $a->__invoke(['test']);
객체를 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);