2017-11-08 2 views
0

나는 다음과 같은 코드가 있습니다날짜 시간 인스턴스 속성 a를 위해서 var_dump에 의한 변경() 또는 인 print_r()

<?php 

$date = new DateTime; 
var_dump($date); 
$date->timezone = 'Europe/Madrid'; 
var_dump($date->timezone); // Shows 'Europe/Madrid' 
var_dump($date);   // Shows 'UTC' (!) 
var_dump($date->timezone); // Shows 'UTC' (!!) 

다음과 같은 출력을 보여줍니다

object(DateTime)#1 (3) { 
    ["date"]=> 
    string(26) "2017-11-08 21:21:15.596968" 
    ["timezone_type"]=> 
    int(3) 
    ["timezone"]=> 
    string(3) "UTC" 
} 
string(13) "Europe/Madrid" 
object(DateTime)#1 (3) { 
    ["date"]=> 
    string(26) "2017-11-08 21:21:15.596968" 
    ["timezone_type"]=> 
    int(3) 
    ["timezone"]=> 
    string(3) "UTC" 
} 
string(3) "UTC" 

$date->timezone 변경 다시 유럽에서/마드리드 '에서'UTC '까지 간단하게 할 때 var_dump($date) ???

var_dump() 대신 print_r()을 사용하면 같은 결과가 나타납니다.

답변

1

timezone은 (는) 새로운 DateTime 클래스의 속성이 아닙니다. DateTime 객체를 만든 직후에 액세스하여이를 확인할 수 있습니다.

$date = new DateTime; 
echo $date->timezone; 

이렇게하면 정의되지 않은 속성 공지가 표시됩니다.

print_r 또는 var_dump을 개체에 적용하면 PHP가 timezone 속성을 표시하지만 해당 속성을 수정해도 기본 데이터가 수정되지 않습니다.

다음 번에 var_dump 또는 print_r 개체를 사용하면 표시 속성이 다시 생성되어 변경 내용을 덮어 씁니다.

실제로 시간대를 변경해야하는 경우 방법을 대신 사용할 수 있습니다.

$date->setTimezone(new DateTimeZone('Europe/Madrid')); 

(또는 PHP 구성에서 시간대를 설정합니다.) 흥미롭게도


timezone 속성에 직접 참조는 여전히 setTimezone로 업데이트 후에도 이전 값을 보여줍니다. 외관상으로는 당신은 var_dump 그 속성을 다시 만들기위한 전체 개체가 필요합니다.

$date = new DateTime; 
var_dump($date);  // Shows 'UTC' 
$date->setTimezone(new DateTimeZone('Europe/Madrid')); 
var_dump($date->timezone); // Still shows 'UTC' (!) 
var_dump($date);   // Shows 'Europe/Madrid' 
var_dump($date->timezone); // Shows 'Europe/Madrid' 
+0

답장을 보내 주셔서 감사합니다. 'print_r()'또는'var_dump()'를 사용할 때 존재하지 않는 속성을 표시하기 위해 PHP가 사용하는 기본 메커니즘을 자세히 설명해 주시겠습니까? PHP는 어떻게 할 수 있습니까? –

+1

이 알려진 "버그"에 대한 자세한 정보가 필요하면 - https://bugs.php.net/bug.php?id=75232 –

+0

@ RicardoPérezLópez 자세한 내용을 보려면 여기를 클릭하십시오. . [Here 's one] (https://stackoverflow.com/questions/17066034/print-r-add-properties-to-datetime-objects) –

관련 문제