PHP의 DateTime 클래스에서 DateTime-> date에 액세스 할 수없는 이유는 무엇입니까? 그게 버그 야?
PHPPHP의 DateTime 클래스에서 DateTime-> date에 액세스 할 수없는 이유는 무엇입니까? 그게 버그 야?
다음 코드를 실행하려고하면 DateTime 클래스를 사용하십시오.
$mydate = new DateTime();
echo $mydate->date;
이 오류 메시지가 나옵니다.
변수 $ mydate에서 var_dump ()를 실행할 때이 속성이 존재하며 공개적으로 액세스 할 수 있음을 명확하게 보여주기 때문에 이해가되지 않습니다.
var_dump($mydate);
object(DateTime)[1]
public 'date' => string '2012-12-29 17:19:25' (length=19)
public 'timezone_type' => int 3
public 'timezone' => string 'UTC' (length=3)
이것은 PHP 내의 버그입니까? 아니면 잘못된 것입니까? PHP 5.4.3을 사용하고 있습니다.
해결법
-
==============================
1.이는 알려진 문제입니다.
이는 알려진 문제입니다.
웬일인지, 당신은 그 속성에 접근 할 수 있다고 가정하지는 않지만, var_dump는 그것을 보여줍니다. 실제로 해당 형식으로 날짜를 가져 오려면 DateTime :: format () 함수를 사용하십시오.
echo $mydate->format('Y-m-d H:i:s');
-
==============================
2.DateTime :: format ()을 사용하는 것 외에도 리플렉션을 사용하여 속성에 액세스 할 수 있습니다.
DateTime :: format ()을 사용하는 것 외에도 리플렉션을 사용하여 속성에 액세스 할 수 있습니다.
<?php $dt = new DateTime(); $o = new ReflectionObject($dt); $p = $o->getProperty('date'); $date = $p->getValue($dt));
format ()은 이미 포맷 된 타임 스트링을 포맷하기 때문에 format ()을 사용하는 것보다 약간 빠릅니다. 특히 루프에서 여러 번 반복 할 경우 특히 그렇습니다.
그러나 이것은 PHP의 일반적인 동작이 아닙니다. bugreport는 이미 @Nile이 위의 주석에 언급 된대로 제기되었습니다.
-
==============================
3.다른 답변에서 언급했듯이, 현재 PHP로는 해결되지 않은 문제이지만 var_dump ()의 '부작용'이라면 그렇게 확신 할 수 없습니다.
다른 답변에서 언급했듯이, 현재 PHP로는 해결되지 않은 문제이지만 var_dump ()의 '부작용'이라면 그렇게 확신 할 수 없습니다.
echo ((array) new DateTime())['date']; // Works in PHP 7.
필자가 확신 할 수있는 것은 DateTime의 속성이 우리가 사용하기로 의도 한 것이면 사용할 수있게되었을 것입니다. 그러나 많은 내부 클래스와 같지 않으므로 코드를 수정하기 위해 "hacky"또는 "glitchy"메서드에 의존해서는 안됩니다. 대신 API를 사용해야합니다.
echo (new DateTime())->format('Y-m-d H:i:s');
만족스럽지 않으면 클래스를 확장하거나 Carbon을 사용하여 확장 할 수 있습니다.
echo (new Carbon())->toDateTimeString();
var_dump ()가 어떻게 객체의 가짜 출력을 생성하는지 궁금하다면 __debugInfo ()를 살펴보십시오.
-
==============================
4.프로퍼티 날짜를 물어보기 전에 var_Dump를 사용하면 모든 것이 올바르게 작동합니다.
프로퍼티 날짜를 물어보기 전에 var_Dump를 사용하면 모든 것이 올바르게 작동합니다.
$mydate = new DateTime(); var_Dump($mydate); echo '<br>'; echo $mydate->date;
이는 다음을 제공합니다.
object(DateTime)#1 (3) { ["date"]=> string(26) "2017-04-11 08:44:54.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(16) "America/New_York" } 2017-04-11 08:44:54.000000
그래서 객체에 대해서도 속성 날짜가 존재하는 것을 볼 수 있습니다. 나는이 행동을 이해할 수 없다. var_Dump를 주석 처리하면 오류가 다시 발생합니다.
from https://stackoverflow.com/questions/14084222/why-cant-i-access-datetime-date-in-phps-datetime-class-is-it-a-bug by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
참조 - SimpleXML에서 네임 스페이스 (콜론이있는 태그와 속성)를 처리하려면 어떻게해야합니까? (0) | 2018.09.08 |
---|---|
체크 박스가 true 일 때 행을 강조 표시하십시오. (0) | 2018.09.08 |
JSON 문자열을 배열로 변환하는 방법 (0) | 2018.09.08 |
PHP에서 POST를 통해 동일한 이름을 가진 다중 입력 (0) | 2018.09.08 |
MySQL 트리거에서 PHP 스크립트 호출하기 (0) | 2018.09.08 |