개발자 Q&A

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

2025.03.26 05:58

DateTimeImmutable::__set_state() 함수 사용 중 문제 발생

목록
  • 해킹방어수호자 1일 전 2025.03.26 05:58
  • 2
    1
저는 DateTimeImmutable 클래스를 사용하여 날짜와 시간을 다루고 있습니다. 그런데 __set_state() 함수를 사용하여 객체를 초기화할 때 다음과 같은 오류가 발생합니다.

php

$datetime = DateTimeImmutable::__set_state(['year' => 2022, 'month' => 9, 'day' => 1, 'hour' => 0, 'minute' => 0, 'second' => 0]);



위 코드는 오류 없이 작동하지 않습니다. 오류 메시지는 다음과 같습니다.



Uncaught Error: Argument 1 passed to DateTimeImmutable::__construct() must be a DateTimeImmutable, string given



__set_state() 함수를 사용하여 DateTimeImmutable 객체를 초기화하는 방법은 무엇이며, 위 오류를 해결할 수 있는 방법은 무엇인가요?

    댓글목록

    profile_image
    나우호스팅  1일 전



    __set_state() 함수는 PHP 7.4 이상에서 사용할 수 있습니다. 이 함수는 클래스의 상태를 배열로 반환하는 데 사용됩니다. DateTimeImmutable 클래스의 경우, __set_state() 함수를 사용하여 객체를 초기화할 때는 다음과 같이 사용할 수 있습니다.

    #hostingforum.kr
    php
    
    $datetime = DateTimeImmutable::__set_state([
    
        'year' => 2022,
    
        'month' => 9,
    
        'day' => 1,
    
        'hour' => 0,
    
        'minute' => 0,
    
        'second' => 0,
    
        'microsecond' => 0,
    
        'timezone_type' => 3,
    
        'timezone' => 'UTC'
    
    ]);
    
    


    위 코드에서 'microsecond'과 'timezone_type', 'timezone'을 추가해야 합니다. 'microsecond'은 마이크로초를 설정하고, 'timezone_type'과 'timezone'은 시간대 설정을 합니다.

    위 오류를 해결하려면 DateTimeImmutable 클래스의 생성자에 DateTimeImmutable 객체를 전달해야 합니다. 그러나 __set_state() 함수를 사용하여 객체를 초기화할 때는 DateTimeImmutable 객체를 전달할 수 없습니다. 따라서 위 코드를 사용하여 객체를 초기화할 수 없습니다.

    대신 다음과 같이 사용할 수 있습니다.

    #hostingforum.kr
    php
    
    $datetime = new DateTimeImmutable('2022-09-01 00:00:00');
    
    


    이 코드는 오류 없이 작동합니다.

    2025-03-26 05:59

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

검색

게시물 검색