개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.03.11 16:18

ReflectionProperty::setAccessible 사용법에 대한 질문

목록
  • 컴파일러수집가 14일 전 2025.03.11 16:18
  • 11
    1
저는 ReflectionProperty::setAccessible 메소드를 사용하여 객체의 프로퍼티에 접근하려고 합니다.
하지만, 이 메소드를 사용할 때 예외가 발생하고 이해가 잘 안됩니다.

ReflectionProperty::setAccessible 메소드를 사용할 때, 어떻게 예외를 처리하는 것이 좋을까요?
또한, 이 메소드를 사용하여 객체의 프로퍼티에 접근할 때, 어떤 경우에 예외가 발생할 수 있는지 알려주세요.

예를 들어, 다음과 같은 코드를 작성했습니다.
php

$reflectionProperty = new ReflectionProperty($obj, 'propertyName');

$reflectionProperty->setAccessible(true);

$propertyValue = $reflectionProperty->getValue($obj);


이 코드에서, `$obj`가 `null`일 때, 예외가 발생하나요? 아니면 `$obj`가 `null`일 때, 어떤 결과가 발생할까요?

또한, `$obj`가 객체가 아닌 경우, 예외가 발생하나요? 아니면 어떤 결과가 발생할까요?

이러한 경우에, 어떻게 예외를 처리할 수 있는지 알려주세요.

    댓글목록

    profile_image
    나우호스팅  14일 전



    ReflectionProperty::setAccessible 메소드를 사용할 때 예외를 처리하는 방법은 다음과 같습니다.

    1. `$obj`가 `null`일 때: 이 경우, ReflectionProperty::setAccessible 메소드는 예외를 발생시키지 않습니다. 하지만, `$obj`가 `null`일 때, `$reflectionProperty->getValue($obj)` 메소드는 ReflectionException을 발생시킵니다. 따라서, `$obj`가 `null`일 때는 `$reflectionProperty->getValue($obj)` 메소드 호출 전에 `$obj`를 확인하는 것이 좋습니다.

    2. `$obj`가 객체가 아닌 경우: 이 경우, ReflectionProperty::setAccessible 메소드는 예외를 발생시키지 않습니다. 하지만, `$reflectionProperty->getValue($obj)` 메소드는 ReflectionException을 발생시킵니다. 따라서, `$obj`가 객체가 아닌 경우에는 `$reflectionProperty->getValue($obj)` 메소드 호출 전에 `$obj`를 확인하는 것이 좋습니다.

    예외를 처리하는 방법은 다음과 같습니다.

    #hostingforum.kr
    php
    
    try {
    
        $reflectionProperty = new ReflectionProperty($obj, 'propertyName');
    
        $reflectionProperty->setAccessible(true);
    
        $propertyValue = $reflectionProperty->getValue($obj);
    
    } catch (ReflectionException $e) {
    
        // 예외 처리 코드
    
    }
    
    


    또한, `$obj`가 `null`이나 객체가 아닌 경우를 확인하는 코드를 추가하여 예외를 처리할 수 있습니다.

    #hostingforum.kr
    php
    
    if ($obj === null) {
    
        // 예외 처리 코드
    
    } elseif (!is_object($obj)) {
    
        // 예외 처리 코드
    
    } else {
    
        $reflectionProperty = new ReflectionProperty($obj, 'propertyName');
    
        $reflectionProperty->setAccessible(true);
    
        $propertyValue = $reflectionProperty->getValue($obj);
    
    }
    
    

    2025-03-11 16:19

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 6,281건 / 218 페이지

검색

게시물 검색