有一个班级
class SomeClass1{
public static function myStatic($arg){
return (new SomeClass1)->myMethod($arg);
}
public function myMethod($arg){
return $arg;
}
}
var_dump((SomeClass1::myStatic('123')));
我真的不喜欢这部分
(new SomeClass1)->myMethod($arg);
还有其他方法吗?
更新 我也可以称之为
(new static)->myMethod($arg);
答案 0 :(得分:1)
如果必须这样做,则可能表明该方法应该是静态的。如果要调用非静态函数,则需要该对象的实例。
话虽如此,有很多选项可以获得一个对象。也许你制作一个新的,临时的(如你的例子所示)。也许有一个静态类变量,它是类的实例,用于执行此类操作。
答案 1 :(得分:0)
如果myMethod($arg)
不需要返回实例化对象的状态(并且它没有根据您的示例代码),那么您应该将该方法设为静态,并使用{ {1}}
如果您正在执行此操作,因为您还需要在 实例化时从对象内调用该方法,您可以在其他方法中使用var_dump( SomeClass1::myMethod('123') );
。
答案 2 :(得分:0)
简短的回答是否定的。
答案很长,你应该避免完全写静态方法。静态方法使测试更难。您可能不会处于测试代码的位置(您应该立即开始),但现在至少可以帮助您自己做的就是停止编写静态方法。硬停。没有例外。
我意识到创建一个实例只是为了使用一个没有状态的方法似乎是额外的输入,但从长远来看它会得到回报。
支持静态方法的原因:
http://googletesting.blogspot.com/2008/12/static-methods-are-death-to-testability.html
http://www.giorgiosironi.com/2009/11/mocking-static-methods-road-to-hell.html
它没有测试导致问题的方法本身,当你测试依赖于其他静态方法的其他类和方法时 - 它通常会设置大量的上下文来让所有其他静态的东西工作所以你可以测试你关心的当前方法。模拟依赖项要容易得多,因此可以直接测试主题。
如果你需要一个资源来进行测试,那就是一个(有很多!)。 http://www.sitepoint.com/tutorial-introduction-to-unit-testing-in-php-with-phpunit/