PHP: строковый параметр для __construct передан неправильно

Я пробую свои силы в TDD с PHP и пишу веб-приложение для доступа к статьям в базе данных MySQL; это тестовая функция:

class TestArticleTestCase extends UnitTestCase {

...

public function testArticleGenerateInsertSqlString() {
    $testArticle = new Article("12345", "2009-09-13 20:20:20", "Test heading", "Test text");

    ...

}

и это класс статьи:

class Article {
    private $_articleId;
    private $_pubDate;
    private $_heading;
    private $_text;

    public function __construct($articleId, $pubDateUnchecked, $headingUnescaped, $textUnescaped) {
        echo "pubDateUnchecked == $pubDateUnchecked </BR>";
            ...

 }

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

pubDateUnchecked == 01.06.2005 12:00:00

Может быть, я просто слишком долго смотрел на этот код, но как строка может измениться с того места, где я создаю ее экземпляр, на непосредственное место, где она создается, ДО того, как я начну манипулировать ею как датой (я проверяю, что она находится в допустимом формате даты с помощью strtotime () и date() позже..).

У кого-нибудь есть идеи, где искать?

Спасибо, Стефан.


person gouwsmeister    schedule 19.08.2009    source источник
comment
Ты уверен? я не вижу ничего плохого в этом коде   -  person knittl    schedule 19.08.2009


Ответы (1)


Может проблема с кешем? Или вы отредактировали не тот файл? Случалось и раньше ;-)
В этом случае поможет отладчик. Но если у вас нет/не можете установить, попробуйте что-то вроде

public function testArticleGenerateInsertSqlString() {
  $testdata = array(
    array('articleId'=>"12345", 'pubDateUnchecked'=>"2009-09-13 20:20:20", 'headingUnescaped'=>"Test heading", 'textUnescaped'=>"Test text")
  );
  echo '<div>Test. Now=', date('Y-m-d H:i:s'),' modtime(__FILE__)=', date('Y-m-d H:i:s', filemtime(__FILE__)), "</div>\n";
  foreach( $testdata as $t ) {
    echo "<div>Test. new Article({$t['articleId']}, {$t['pubDateUnchecked']}, {$t['headingUnescaped']}, {$t['textUnescaped']})</div>";
    $testArticle = new Article($t['articleId'], $t['pubDateUnchecked'], $t['headingUnescaped'], $t['textUnescaped']); 
person VolkerK    schedule 19.08.2009
comment
Большое спасибо за этот тестовый код VolkerK! Я запустил его и обнаружил, что проблема заключается в строке if ($timestamp = strtotime($pubDateUnchecked) === false) { throw new Exception('Invalid pubDate. Дата должна быть, например, ГГГГ-ММ-ДД Ч:М:С '); } который постоянно производил 1970-01-01 02:00:00. Окружение назначения с помощью () решило проблему. Дэнки! - person gouwsmeister; 19.08.2009