Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php print\u r()将属性添加到DateTime对象_Php_Debugging_Datetime_Php Internals - Fatal编程技术网

Php print\u r()将属性添加到DateTime对象

Php print\u r()将属性添加到DateTime对象,php,debugging,datetime,php-internals,Php,Debugging,Datetime,Php Internals,考虑以下代码示例: $m_oDate=新日期时间('2013-06-12 15:54:25'); 印刷品(百万美元); echo$m_oDate->date; 自PHP 5.3以来,这将产生(类似于)以下输出: DateTime对象 ( [日期]=>2013-06-12 15:54:25 [时区类型]=>3 [时区]=>欧洲/阿姆斯特丹 ) 2013-06-12 15:54:25 但是,以下代码: $m_oDate=新日期时间('2013-06-12 15:54:25'); echo$m_o

考虑以下代码示例:

$m_oDate=新日期时间('2013-06-12 15:54:25');
印刷品(百万美元);
echo$m_oDate->date;
自PHP 5.3以来,这将产生(类似于)以下输出:

DateTime对象
(
[日期]=>2013-06-12 15:54:25
[时区类型]=>3
[时区]=>欧洲/阿姆斯特丹
)
2013-06-12 15:54:25
但是,以下代码:

$m_oDate=新日期时间('2013-06-12 15:54:25');
echo$m_oDate->date;
…只会发出一个错误:

注意:未定义的属性:DateTime::$date in。。。

为什么要将这些属性“添加”到对象中?请注意,它们没有定义为上的
DateTime
类的一部分。

中没有
date
属性;这就是为什么您会得到
(未定义的属性:DateTime::$date)。

print\u r()
对对象执行一些操作以显示其内容;这会使对象神奇地创建
::date
属性。但这并没有文档记录,所以使用它可能会在将来破坏您的代码


您需要类似于
$m_-oDate->format('m-d-Y')取而代之。

中没有
日期
属性;这就是为什么您会得到
(未定义的属性:DateTime::$date)。

print\u r()
对对象执行一些操作以显示其内容;这会使对象神奇地创建
::date
属性。但这并没有文档记录,所以使用它可能会在将来破坏您的代码

您需要类似于
$m_-oDate->format('m-d-Y')

这是用PHP编写的

在PHP5.3中,添加了内部功能,允许
print_r()
显示
DateTime
实例所持有的基本时间戳值的详细信息,以协助调试。此更改的一个副作用是,当对象转储为文本时,这些虚拟公共属性将添加到实例中

使用访问这些属性也可以达到相同的效果,如果需要访问这些属性,那么使用反射将是一种方法,这样就不会引发错误

但是,应该注意的是,您不应该真正使用这些属性——因为它们没有定义为对象的成员,所以不能保证它们在未来的PHP版本中会继续携带相同的数据(甚至存在)。如果需要访问信息,请使用API中定义的以下方法:

/$obj->日期
$obj->格式('Y-m-d H:i:s');
//$obj->时区
$obj->getTimezone()->getName();
//或者。。。
$obj->getTimezone()->getOffset();
//或者。。。
$obj->getTimezone()->ListAbstraints();//返回一个数组,因此可能需要
//需要进一步处理
注意:
timezone\u type
属性无法通过PHP API访问。它是一个内部值,在userland中没有用处,因为它描述了对象转储时
时区
保存的字符串类型,即上面代码示例中获取时区信息的三种方法之一。为了完整性,其可能值如下所示:

Value | Type | Userland equivalent ------+-----------------------+---------------------------------- 1 | time offset | DateTimeZone::getOffset() 2 | TimeZone abbreviation | DateTimeZone::listAbbreviations() 3 | TimeZone identifier | DateTimeZone::getName() 价值|类型|使用者土地当量 ------+-----------------------+---------------------------------- 1 |时间偏移| 2 |时区缩写| 3 |时区标识符| 这是用PHP实现的

在PHP5.3中,添加了内部功能,允许
print_r()
显示
DateTime
实例所持有的基本时间戳值的详细信息,以协助调试。此更改的一个副作用是,当对象转储为文本时,这些虚拟公共属性将添加到实例中

使用访问这些属性也可以达到相同的效果,如果需要访问这些属性,那么使用反射将是一种方法,这样就不会引发错误

但是,应该注意的是,您不应该真正使用这些属性——因为它们没有定义为对象的成员,所以不能保证它们在未来的PHP版本中会继续携带相同的数据(甚至存在)。如果需要访问信息,请使用API中定义的以下方法:

/$obj->日期
$obj->格式('Y-m-d H:i:s');
//$obj->时区
$obj->getTimezone()->getName();
//或者。。。
$obj->getTimezone()->getOffset();
//或者。。。
$obj->getTimezone()->ListAbstraints();//返回一个数组,因此可能需要
//需要进一步处理
注意:
timezone\u type
属性无法通过PHP API访问。它是一个内部值,在userland中没有用处,因为它描述了对象转储时
时区
保存的字符串类型,即上面代码示例中获取时区信息的三种方法之一。为了完整性,其可能值如下所示:

Value | Type | Userland equivalent ------+-----------------------+---------------------------------- 1 | time offset | DateTimeZone::getOffset() 2 | TimeZone abbreviation | DateTimeZone::listAbbreviations() 3 | TimeZone identifier | DateTimeZone::getName() 价值|类型|使用者土地当量 ------+-----------------------+---------------------------------- 1 |时间偏移| 2 |时区缩写| 3 |时区标识符|
有一些魔法正在发生,但它很简单

该类没有您要访问的公共变量“date”。然而,作为PHP工作方式的一个副作用,在该类上调用print\u r或var\u dump时会创建一个变量


在这神奇的事情发生之后,“日期”是可用的,但它不应该是可用的。您应该只使用getTimestamp函数使代码可靠地工作。

有一些神奇之处,但它非常简单

该类没有您要访问的公共变量“date”。然而,作为PHP工作方式的一个副作用,在使用c时会创建一个变量
$m_oDate = new DateTime('NOW');
echo $m_oDate->format("r");
static HashTable *date_object_get_properties(zval *object TSRMLS_DC)
{
    // ...
    zend_hash_update(props, "date", 5, &zv, sizeof(zval), NULL);
    // ...
$m_oDate = new DateTime('2013-06-12 15:54:25');
some_func($m_oDate);
echo $m_oDate->{'ROXXOR_IS_BACK!!'};
PHP never lets you down.
function some_func($m_oDate) {
    $m_oDate->{'ROXXOR_IS_BACK!!'} = 'PHP never lets you down.';
}