我有一组独立的函数,我想把它们放在一个类中。它们不依赖于类的任何对象,因此在调用它们时,所需的所有值都将作为参数传递。如果我将它们全部声明为静态这样我可以只用一个命令调用它们,className::functionName(argument1,argument2,...)
或者我将它们保持为普通的公共函数并通过类对象调用它们,这很好吗?
问问题
80 次
2 回答
5
你可以(但你不应该这样做):
class YourClass {
public static function yourMethod( ) {
echo "method called";
}
}
YourClass::yourMethod();
你不应该这样做的原因是因为当你在其他一些类/函数/任何你紧密耦合YourClass
到其他类的东西中使用静态调用时。因此,您很难进行单元测试或简单地切换到另一个方法,而无需通过所有使用它的代码。也不要忘记你刚刚添加了一些东西global
。
你还说:
我有一组独立的函数,我想把它们放在一个类中。
在我的书中,这是一个很大的代码气味。这听起来像是您的课程违反了SOLID编程中的SRP 原则。
因此,我只会实例化该类。
让我们看看为什么它使您的代码难以测试:
class SomeClassWithMethods
{
public static function doSomething()
{
}
}
class SomeClassYouWantToTest
{
public function doSomething()
{
return SomeClassWithMethods::doSomething(); // this is now tightly coupled and would be impossible to mock when unit testing it
}
}
这SomeClassWithMethods::doSomething
也是现在全球定义的。
我们喜欢称之为银弹:):
于 2012-08-09T11:30:43.677 回答
0
是的,这还不错。您可以将它们定义为静态函数,就像您说的那样 - 您可以只用一个语句调用它们。
class Foo {
public static function bar( ) {
echo "bar called";
}
}
于 2012-08-09T11:26:46.500 回答