해결된 질문
작성
·
142
1
안녕하세요, 강의를 보며 프로젝트 예제 코드를 따라 타이핑 하면서 궁금한 것이 있어 질문드립니다.
아마 '36-메인(Index)' 강의에서 Post 클래스를 사용함에 있어 생겼었떤 궁금증과 동일할 거 같습니다.
'회원가입' 처리를 위해 UserController::store 정적 메소드에서 'POST' 방식으로 넘어온 'email', 'password' 데이터를 User 객체의 프로퍼티(멤버변수)로 설정하는 코드를 볼 수 있었습니다.
하지만 실제 User 클래스에서는 가령 public $email, public $password와 같이 프로퍼티(멤버변수)가 선언되어 있지 않았는데요.
이게 어떻게 가능하게 된건지 원리가 궁금합니다.
P.S 저는 Java(SpringFramework)도 함께 공부를 진행중에 있습니다.(실무에서 Java, PHP 둘 다 쓰기에...)
Java에서 클래스의 성질과 비슷하다라고 생각하니 이번 강의에서 보여주셨던 코드가 동작하는게 이해가 가지 않더라구요.
미리 답변 감사드립니다.
답변 1
1
답변이 많이 늦었습니다. 몸이 영 좋지않았던 점 양해바랍니다.
PHP 클래스는 다소 멍청합니다. 예를 들어 다음과 같은 코드는 동작합니다. 별도로 프로퍼티를 선언하지 않았음에도 할당할 수 있고, 접근도 가능합니다. 물론 이렇게 하는 것은 나쁩니다. 저도 강의를 수정한다면 추가했을 것입니다. 원리적으로 볼때 내부적으로 매직메서드 __set() 이 호출됩니다.
class A
{
public function __construct(string $message)
{
$this->message = $message;
}
// public function __set($name, $value)
// {
// $this->$name = $value;
// }
}
$a = new A('Hello, world');
var_dump( $a->message );
몸은 좀 괜찮아지셨는지요?
PHP에 존재하는 매직 메서드로 하여금 굳이 Class 내 프로퍼티로 선언되어 있지 않아도
동적(?)으로 설정이 가능한지 처음 알게 되었네요.
답변 감사드립니다.