Глюк PHP? Datetime/Dateinterval валит свойство стороннего класса!

Gas

может по одной?
Скажите, что делать мне в таком случае?
как минимум, выложить минимальный код сюда + какая версия php, может кто подскажет баг это или нет.
 

FB3

Новичок
bugs.php.net попробовать покопать?

Или отправить туда минимум кода, который приводит к ошибке.
 

Духовность™

Продвинутый новичок
PHP Version 5.3.1

Я не знаю, какой именно код выложить, просто ситуация такая, что валится код, который при таких же условиях архитектуры совершенно корректно работает.

В шаблоне вызываем метод объекта который возвращает объект типа [m]DateInterval[/m]
PHP:
<? if ($advert->foo()->invert): ?>
метод выглядит так:
PHP:
public function foo($hour=1)
{
    // Создаем интервал - 1 час    
    $interval = new DateInterval('P0Y0DT'.$hour.'H0M'); 
    // и меняем время свойства класса типа Datetime 
    // на 1 час больше
    $this->date->add($interval);

    $now = new Datetime();
    // возвращаем объект интервала
    return $now->diff($this->date);
    }
именно этот метод, а точнее наличие вызова метода diff валит private переменную в другом классе. Сам же метод работает без ошибок, как нужно.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
просто ситуация такая, что валится код, который при таких же условиях архитектуры совершенно корректно работает.
обычно это значит, что у тебя ошибка в другом месте.
 

tony2001

TeaM PHPClub
>Я не знаю, какой именно код выложить
1) короткий.
2) на котором воспроизводится проблема.
3) который не требует установки фреймворков и т.п., т.е. самодостаточный.

без этого можно только на внутренностях домашних животных гадать.
 

Вурдалак

Продвинутый новичок
Скопируй код и начинай его «сокращать» до тех пор, пока не станет ясно чья это ошибка :)
 

Духовность™

Продвинутый новичок
писец, я замучался

tony2001

UPDATE. Всё, сократил код дальше некуда.

Данный код влияет на деление:

PHP:
<?php
error_reporting(E_ALL);

function foo($date)
{
    $interval = new DateInterval('P0Y0DT1H0M');
    $t_date = new Datetime($date);
    $t_date->add($interval);

    $now = new Datetime();
    return $now->diff($t_date);
}

$dates = array('2010-06-21 23:40:07', '2010-06-02 23:39:59');
   
foreach ($dates as $date)
{
    // от наличия вызова этой функции зависит многое! 
    $result = foo($date);
    
    print_r($result);
}

$t = 100/3; // WTF? NAN!!

print_r($t);
?>
В чем причина такого поведения?
 

Духовность™

Продвинутый новичок
Вурдалак
О_о

Ну я не знаю тогда, у меня этот простейший скрипт выдает NAN при вызове функции foo с этими датами

Windows XP, денвер, PHP 5.3.1 phpinfo
 

fixxxer

К.О.
Партнер клуба
triumvirat

попробуй отключить если стоят:

1) байткод кэшеры (eAccelerator etc)
2) Zend optimizer
3) Xdebug итд

если дело в них, то обновить до последних версий и если воспроизводится репортить баг им (а п.2 выкинуть на помойку)
 

Духовность™

Продвинутый новичок
Вурдалак
fixxxer
tony2001
пробовали обновить страницу? У меня только при каких-то определённых условиях Nan появляется.

Ну в общем я не знаю, как это лечить. Никаких преподключаемых файлов у меня нет, ничего из перечисленного fixxxer-ом нет. Настройки в php-ini я не трогал. Стоит денвер, может в нем проблема?
 

vovanium

Новичок
хм, действительно подтверждаю сначала выводится нормально, после 4-5 обновления страницы выводит NAN. После рестарта апача поведение аналогичное.

При этом если поменять 100/2, 100/4 то всё в норме, ставишь 100/3 опять NAN, но еще веселее если поставить 100/5.5, Warning: Division by zero in G:\www\test.php on line 24.
24 строка это именно там где деление. рестарт апача и опять нормально работает, но после 4-5 обновлений опять ошибка.

win7 x64, apache 2.2.14, php 5.3.2 (из инсталляхи с php.net, никаких денверов и zend optimizer)
 

baev

‹°°¬•
Команда форума
У меня денвер, судя по результатам phpinfo() — та же сборка.
«NAN» появился после четвёртого обновления страницы.
 
Сверху