<html lang="ko">
<head>
<meta charset="UTF-8">
<title>PHP OOP</title>
</head>
<body>
class PropertyOverloading
{
private $data = array(); // 오버로딩된 변수가 저장될 배열 생성
public $declared = 10; // public으로 선언된 프로퍼티
private $hidden = 20; // private로 선언된 프로퍼티
public function __set($name, $value)
{
echo "$name 프로퍼티를 {$value}의 값으로 생성합니다!";
$this->data[$name] = $value;
}
public function __get($name)
{
echo "$name 프로퍼티의 값을 읽습니다!<br>";
if (array_key_exists($name, $this->data)) {
return $this->data[$name];
} else {
return null;
}
}
public function __isset($name)
{
echo "$name 프로퍼티가 설정되어 있는지 확인합니다!<br>";
return isset($this->data[$name]);
}
public function __unset($name)
{
echo "$name 프로퍼티를 해지합니다!";
unset($this->data[$name]);
}
}
$obj = new PropertyOverloading(); // PropertyOverloading 객체 생성
$obj->prop = 1; // 동적 프로퍼티 생성
echo "<br><br>";
echo $obj->prop; // 동적 프로퍼티에 접근
echo "<br><br>";
var_dump(isset($obj->prop)); // 동적 프로퍼티로 isset() 함수 호출
echo "<br><br>";
unset($obj->prop); // 동적 프로퍼티로 unset() 함수 호출
echo "<br><br>";
var_dump(isset($obj->prop)); // 동적 프로퍼티로 isset() 함수 호출
echo "<br><br>";
echo $obj->declared; // 선언된 프로퍼티는 오버로딩을 사용하지 않음.
echo "<br><br>";
echo $obj->hidden; // private로 선언된 프로퍼티는 클래스 외부에서 접근할 수 없으므로, 오버로딩을 사용함.
</body>
</html>