안녕하세요. 명월입니다.
이 글은 PHP의 Reflection - Variable편에 관한 글입니다.
이전에 제가 Class와 Method에 대해 설명했습니다.
링크 - [PHP] Reflection - Class편
링크 - [PHP] Reflection - Method편
사실 PHP에서는 Reflection Variable이 크게 필요하지는 않습니다.
다른 언어, 특히 컴파일 언어(Java나 C#)에서는 컴파일 전에 Unit테스트를 만들어서 해당 클래스의 변수가 예상대로 잘 들어가 있는지 확인하기 위해 사용합니다만, PHP는 컴파일 단계가 없기 때문에 이런 테스트가 의미가 없겠네요.
그냥 바로 var_dump로 찍어보는게 훨씬 빠르고 편할 테니깐요.
그래도 PHP측에서 제공하는 기능이니 간단하게 살펴보겠습니다.
먼저 보통 설계를 하면 Class 안의 맴버변수는 private으로 만드는 게 정석이기 때문에 private타입을 취득하는 방법에 대해 알아보겠습니다.
<?php
class EXClass {
private $data = "init";
public function getData(){
return $this->data;
}
}
// Reflection으로 EXClass를 찾는다.
$r = new ReflectionClass('EXClass');
// 인스턴스를 생성시킨다.
$obj = $r->newInstance();
// 맴버 변수명 data를 찾는다.
$v = $r->getProperty("data");
// private, protected의 경우에 외부에서 호출이 가능하게 한다.
$v->setAccessible(true);
?>
<!DOCTYPE html>
<html>
<head>
<title>title</title>
</head>
<body>
<?=$v->getValue($obj)?>
</body>
</html>
위 소스를 보면 EXClass안의 data 맴버 변수는 private으로 되어 있습니다. 그런데도 getValue함수를 통해 class의 data값을 직접 취득합니다.
이번에는 반대로 private 변수에 대이터를 넣어보겠습니다.
<?php
class EXClass {
private $data = "init";
public function getData(){
return $this->data;
}
}
// Reflection으로 EXClass를 찾는다.
$r = new ReflectionClass('EXClass');
// 인스턴스를 생성시킨다.
$obj = $r->newInstance();
// 맴버 변수명 data를 찾는다.
$v = $r->getProperty("data");
// private, protected의 경우에 외부에서 호출이 가능하게 한다.
$v->setAccessible(true);
// data의 변수값을 change로 넣는다.
$v->setValue ($obj,"change");
?>
<!DOCTYPE html>
<html>
<head>
<title>title</title>
</head>
<body>
<?=$v->getValue($obj)?>
</body>
</html>
이번에는 setValue를 통해서 맴버변수에 데이터를 넣었습니다.
링크 - https://www.php.net/manual/en/class.reflectionproperty.php
여기까지 PHP에서 다루는 기본 Reflection을 소개했습니다. 이제 PHP를 MVC 패턴으로 사용할 준비가 60%로 되었네요.
이 Reflection을 통해서 Java의 spring과 MVC를 흉내내볼 생각입니다.
그럼 PHP도 확실히 소스 관리면에서 매우 편해 질 것이라고 생각됩니다.
여기까지 PHP의 Reflection - Variable편에 관한 설명이었습니다.
궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.
'Study > PHP' 카테고리의 다른 글
[CakePHP] MVC 프레임워크 Cake를 설치하는 방법 (0) | 2019.10.01 |
---|---|
[PHP] 자동 require 또는 include되는 함수(spl_autoload_register) (0) | 2019.09.30 |
[PHP] PHP의 익명 함수(람다식)와 클로져(closure) (0) | 2019.09.29 |
[PHP] PHP 코딩 영역과 HTML 디자인 영역을 분리 시키는 라이브러리 Smarty (0) | 2019.09.28 |
[PHP] Reflection - Method편 (0) | 2019.09.26 |
[PHP] Reflection - Class편 (0) | 2019.09.25 |
[PHP] 에러 페이지를 처리하는 방법 (추가: ob_clean함수와 die함수 사용법) (0) | 2019.09.24 |
[PHP] 분산 설정 파일(.htaccess) 사용법 (0) | 2019.09.24 |