如何在同一个类中静态调用非静态方法(非严格模式)

时间:2016-01-08 06:36:30

标签: php phpunit

我们有一个使用大量静态方法的库。但是,这使PHPUnit中的测试变得困难,因为我无法模拟那些静态方法调用。因此,我正在删除静态关键字并逐步迁移静态调用,例如:

$users = App_Model_User::find(...);

..为:

$users = App_ServiceLocator::get('model.user')->find(...);

这将允许我在测试时交换项目。但是,在模型库中,我们有许多静态定义的方法和调用,例如:

// method declaration
public static function find(...) {...

// method calls within the class
$result = static::find(...);

我开始从方法声明中删除静态关键字,但我有点不确定如何声明方法调用。我尝试将static替换为self,但这有效,但我不知道这是否正确。我不想使用$ this,因为我们将处于某个状态,我们的部分应用程序正在静态调用find,而更新的部分或已更改的部分正在使用服务定位器:

public function someMethod()
{
    $result = self::find(...); // is this correct? I want to be able to call find here statically as well as when an instance without breaking things

顺便说一下,我们没有以严格的模式运行。我知道严格模式可能是一个不错的选择。我从Laravel那里得到了一颗心,因为我知道它能够以静态方式或实例方法调用相同的方法:

User::where(...)->get();

// $user instance passed into the controller action
$user->where(...)->get();

...我希望,我希望我所做的事情并不是一件坏事。对此有任何建议表示赞赏

0 个答案:

没有答案