【问题标题】:PHP: string parameter to __construct not passed correctlyPHP:__construct 的字符串参数未正确传递
【发布时间】:2009-08-19 10:30:31
【问题描述】:

我正在尝试使用 PHP 进行 TDD,并且正在编写一个基于 Web 的应用程序来访问 MySQL 数据库中的文章;这是测试功能:

class TestArticleTestCase extends UnitTestCase {

...

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

    ...

}

这是 Article 类:

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

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

 }

我在构造函数中包含了回显,因为数据库中的日期不是我初始化文章时使用的,果然,追踪问题,这是构造函数中回显的输出:

pubDateUnchecked == 2005-06-01 12:00:00

也许我只是盯着这段代码太久了,但是在我开始将它作为日期操作之前,字符串如何从我实例化它的位置更改为直接实例化它的位置(我检查它是否在允许的日期稍后使用 strtotime() 和 date() 格式化..)。

有人对去哪里有任何想法吗?

谢谢你, 斯蒂芬。

【问题讨论】:

  • 你确定吗?我看不出这段代码有什么问题

标签: php tdd instantiation parameter-passing


【解决方案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']); 

【讨论】:

  • 非常感谢 VolkerK 的测试代码!我运行它并发现问题出在 if ( $timestamp = strtotime($pubDateUnchecked) === false ) { throw new Exception('Invalid pubDate. Date must be e.g. YYYY-MM-DD H:M:S ');始终产生“1970-01-01 02:00:00”。用 () 包围分配解决了问题.. Dankie!
猜你喜欢
  • 1970-01-01
  • 2015-09-19
  • 2019-11-08
  • 2010-12-08
  • 1970-01-01
  • 1970-01-01
  • 2013-11-25
  • 2017-06-12
  • 1970-01-01
相关资源
最近更新 更多