我有一组独立的函数,我想放在一个类中。
它们不依赖于类的任何对象,因此在调用它们时,所需的所有值都将作为参数传递。
如果我将它们全部声明为静态以便我只用一个命令className::functionName(argument1,argument2,...)
来调用它们就可以了。
或者我将它们作为普通的公共函数保存并通过类对象调用它们?
答案 0 :(得分:5)
你可以(但你不应该这样做):
class YourClass {
public static function yourMethod( ) {
echo "method called";
}
}
YourClass::yourMethod();
你不应该这样做的原因是因为当你在其他类/函数中使用静态调用时,无论你将YourClass
紧密耦合到另一个类。因此,你很难进行单元测试,或者只是切换到另一个方法,而无需使用所有使用它的代码。而且也不要忘记你刚刚添加了global
ly。
你也说:
我有一组独立的函数,我想放在一个类中。
这是我书中的一大代码味道。这使得听起来您的班级违反了SRP principle中的SOLID programming。
因此我只是实例化该类。
让我们看看为什么它会让您的代码难以测试:
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
现在已全局定义。
我们喜欢称之为银弹:):
答案 1 :(得分:0)
是的,这还不错。 你可以将它们定义为静态函数,就像你说的那样 - 你可以用一个语句来调用它们。
class Foo {
public static function bar( ) {
echo "bar called";
}
}