2015-05-06 18 views
7

Bazı testler çalıştırırken, DateInterval nesnelerindeki genel özelliklerin denetlenmesinin veri içerdiklerinde bile false döndürdüğünü fark ettiler. Neden bu/belgelerden ne eksik?DateInterval properties ve isset()

Örnek:

$currentDate = new DateTime(); 
$targetDate = new DateTime('2015-03-05 11:11:11'); 
$interval = $currentDate->diff($targetDate); 
var_dump($interval->y); 
var_dump($interval->m); 
var_dump(isset($interval->y)); 
var_dump(isset($interval->m)); 
var_dump($interval); 

aşağıdaki çıktıyı verecektir:

int(0) 
int(2) 
bool(false) 
bool(false) 
object(DateInterval)#3 (15) { 
    ["y"]=> 
    int(0) 
    ["m"]=> 
    int(2) 
    ["d"]=> 
    int(1) 
    ["h"]=> 
    int(9) 
    ["i"]=> 
    int(43) 
    ["s"]=> 
    int(35) 
    ["weekday"]=> 
    int(0) 
    ["weekday_behavior"]=> 
    int(0) 
    ["first_last_day_of"]=> 
    int(0) 
    ["invert"]=> 
    int(1) 
    ["days"]=> 
    int(62) 
    ["special_type"]=> 
    int(0) 
    ["special_amount"]=> 
    int(0) 
    ["have_weekday_relative"]=> 
    int(0) 
    ["have_special_relative"]=> 
    int(0) 
} 
+0

Diğerlerini yapmadan önce 'var_dump ($ interval)' yapın. "-> m" nin böyle nasıl "kaybolduğunu" göremiyorum. eğer ayarlanmadıysa, o zaman aralık nesnesini herhangi bir şekilde değiştirmediğiniz için, önceki dökümü için içinde '2' bulunabilecek hiçbir yol olmazdı. –

+0

İstenen var_dump çıktısını biçimlendirmenin uğruna ilk soruyu ekledim (php 5.6) – RumpRanger

+0

Bu hatayı bugün birçok karışıklıktan sonra bulmak için yönetilen ... çılgın şeyler – mickadoo

cevap

0

Bu kesinlikle ilginç. Bu Çıkış: isset() yazdırır doğru sonuçları çağırmadan önce bir var_dump($interval) Doing

$currentDate = new DateTime(); 
$targetDate = new DateTime('2015-03-05 11:11:11'); 
$interval = $currentDate->diff($targetDate); 
echo "<pre>"; 
//var_dump($interval); --> if you uncomment this line, it will work just fine 
var_dump($interval->y); 
var_dump($interval->m); 
var_dump(isset($interval->y)); 
var_dump(isset($interval->m)); 

!

object(DateInterval)#3 (15) { 
    ["y"]=> 
    int(0) 
    ["m"]=> 
    int(2) 
    ["d"]=> 
    int(1) 
    ["h"]=> 
    int(9) 
    ["i"]=> 
    int(49) 
    ["s"]=> 
    int(33) 
    ["weekday"]=> 
    int(0) 
    ["weekday_behavior"]=> 
    int(0) 
    ["first_last_day_of"]=> 
    int(0) 
    ["invert"]=> 
    int(1) 
    ["days"]=> 
    int(62) 
    ["special_type"]=> 
    int(0) 
    ["special_amount"]=> 
    int(0) 
    ["have_weekday_relative"]=> 
    int(0) 
    ["have_special_relative"]=> 
    int(0) 
} 
int(0) 
int(2) 
bool(true) 
bool(true) 

Bu dilde, bu tuhaflıklardan birine gerçekten tökezlemiş olmanız gerektiğini düşünüyorum. Bu davranışa neden olabilecek var_dump veya isset veya PHP'nin OOP uygulamasıyla ilgili düşünebileceğim hiçbir şey yok. Belki PHP'ye bir hata raporu?

+0

Eğer nesneyi yazdırırsanız değerleri zorlar gibi görünüyor. Bana çok ilginç geliyor. – RumpRanger

+0

yup - neredeyse bir nesneyi yazdırmak gibi nesnenin sahip olduğu özellikleri "yansıtır". En azından isset söz konusu olduğunda, çünkü bu özelliklerin doğrudan doğruya yazdırıldığından beri değerlerin olduğunu biliyoruz. – raidenace

+0

Bir hata raporunu dosyalayacağım, yanlış yaptığımız bir şey olduğu konusunda eminim. – RumpRanger

İlgili konular