2013-02-07 161 views
3

我有下面的PHP代码:PHP回声不能按预期工作

$ep1 = $tvdb->getEpisodeById($cur->id, 'en'); 
var_dump($ep1); 

它返回:

object(TvDb\Episode)#60 (17) { 
    ["id"]=> int(4490826) 
    ["number"]=> int(12) 
    ["season"]=>  int(3) 
    ["directors"]=> array(0) { } 
    ["guestStars"]=> array(0) { }   
    ["writers"]=> array(0) { } 
    ["name"]=> string(11) "Episode 312" 
    ["firstAired"]=> object(DateTime)#57 (3) { 
     ["date"]=> string(19) "2013-04-07 00:00:00" 
     ["timezone_type"]=> int(3) 
     ["timezone"]=> string(12) "Europe/Sofia" 
    } 
    ["imdbId"]=> string(0) "" 
    ["language"]=> string(2) "en" 
    ["overview"]=> string(0) "" 
    ["rating"]=> string(1) "0" 
    ["ratingCount"]=> int(0) 
    ["lastUpdated"]=> object(DateTime)#3 (3) { 
     ["date"]=> string(19) "2013-01-30 22:15:41" 
     ["timezone_type"]=> int(1) 
     ["timezone"]=> string(6) "+00:00" 
    } 
    ["seasonId"]=> int(501077) 
    ["serieId"]=> int(161511) 
    ["thumbnail"]=> string(0) "" 
}  

我想回声“日期”,我写了以下内容:

$ep1 = $tvdb->getEpisodeById($cur->id, 'en'); 
echo ($ep1->firstAired->date); 

而且它没有返回值,但是当我这样做:

$ep1 = $tvdb->getEpisodeById($cur->id, 'en'); 
var_dump($ep1); 
echo ($ep1->firstAired->date); 

还有转储后的日期显示:

object(TvDb\Episode)#60 (17) { ["id"]=> int(4490826) ["number"]=> int(12) ["season"]=> int(3) ["directors"]=> array(0) { } ["guestStars"]=> array(0) { } ["writers"]=> array(0) { } ["name"]=> string(11) "Episode 312" ["firstAired"]=> object(DateTime)#57 (3) { ["date"]=> string(19) "2013-04-07 00:00:00" ["timezone_type"]=> int(3) ["timezone"]=> string(12) "Europe/Sofia" } ["imdbId"]=> string(0) "" ["language"]=> string(2) "en" ["overview"]=> string(0) "" ["rating"]=> string(1) "0" ["ratingCount"]=> int(0) ["lastUpdated"]=> object(DateTime)#3 (3) { ["date"]=> string(19) "2013-01-30 22:15:41" ["timezone_type"]=> int(1) ["timezone"]=> string(6) "+00:00" } ["seasonId"]=> int(501077) ["serieId"]=> int(161511) ["thumbnail"]=> string(0) "" } 2013-04-07 00:00:0 

我没有这个问题:

$ep1 = $tvdb->getEpisodeById($cur->id, 'en'); 
echo ($ep1->name); 

我希望我是不够清楚,我很抱歉,如果它是一个愚蠢的问题。 谢谢你的时间。

+0

嗨。试试这个:http://php.net/manual/ro/datetime.format.php .'echo $ ep1-> firstAired-> date-> format('Ymd H:i:s');' – ioanb7

+0

你做了什么期望传递一个对象时echo会输出?除非一个对象有一个“魔术”__toString方法,否则你什么也得不到(甚至会抛出一个错误) – poncha

+0

是的,我现在是愚蠢的错误,但我是编程和PHP的新手。谢谢你的解释。 –

回答

3

财产$ep1->firstAiredDateTime对象。您不能像直接尝试一样直接访问它的属性。您必须使用存取方法,如format()

echo $ep1->firstAired->format('Y-m-d H:i:s'); 
+0

非常感谢:) –

1

其实这是真的,真的很奇怪,至少对我来说。我测试了一下,只是在日期属性时,就像你一样,它不起作用,然后我决定添加一个print_r来查看属性...然后我可以打印出日期字符串。

这是我的代码:

$d = new DateTime(); 
print_r($d); 
echo $d->timezone . PHP_EOL; 
echo $d->date . PHP_EOL; 

而且做这样的工作得很好,但是我删除print_r线这是行不通的。

我的系统是用PHP 5.3在shell中运行的Windows 8,这是我的证明:

Yet another PHP feature.

所以,你可以说,你可以做到这一点,你就必须首先做一个print_r的,并且它可能不适用于所有系统。 :D

+0

哇。你有报告错误吗? – ioanb7