获取错误:不应静态调用非静态方法Phactory \ Sql \ Phactory :: reset()

时间:2012-10-31 18:41:53

标签: symfony phpunit phactory

我有一个非常小的PHPUnit测试,如下所示:

<?php
namespace VNN\PressboxBundle\Tests\Entity;
namespace VNN\PressboxBundle\Entity;

use VNN\PressboxBundle\Entity\User;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
use Phactory\Sql\Phactory;

class UserTest extends EntityTest
{
    public function testCreate()
    {   
        Phactory::reset();
    }   
}

当我尝试运行它时,我明白了:

There was 1 error:

1) VNN\PressboxBundle\Entity\UserTest::testCreate
ErrorException: Runtime Notice: Non-static method Phactory\Sql\Phactory::reset() should not be called statically, assuming $this from incompatible context in /Users/jason/Web/pressbox/src/VNN/PressboxBundle/Tests/Entity/UserTest.php line 13

这是怎么回事?所有的文档都静态地称之为。

我在Symfony 2.0上这样做,如果这有所不同。

3 个答案:

答案 0 :(得分:0)

文档说您应该直接使用Phactory下的顶级lib/类 - 而不是基于{{1}实例化Phactory/Sql/Phactory的单个实现。您传递给PDO的对象。变化

setConnection

use Phactory\Sql\Phactory;

主类位于全局命名空间中,不需要require_once 'Phactory/lib/Phactory.php'; 语句。

答案 1 :(得分:0)

https://github.com/chriskite/phactory/issues/30

  

从代码中,setConnection,define和create不是静态函数,但是README和网站指南没有反映出来。

e.g。测试代码 https://github.com/chriskite/phactory/blob/next/tests/Phactory/Sql/PhactoryTest.php

use Phactory\Sql\Phactory;
...
$this->pdo = new \PDO("sqlite:test.db");
$this->phactory = new Phactory($this->pdo);
$this->phactory->define('user');
$this->phactory->reset();

我不知道它何时被更改。

反正太迟了......

答案 2 :(得分:0)

当前版本0.3.2与向后记录的静态方法结构不向后兼容。

这是破解提交:https://github.com/chriskite/phactory/commit/d3b60eeedea955ab7b5803ec29446d19888d3849

不幸的是,文档尚未在http://phactory.org上更新,并且pearhub repo不再可用。

我会查看测试示例:https://github.com/chriskite/phactory/blob/next/tests/Phactory/Sql/PhactoryTest.php