我的同事说当你执行不需要任何扩展的固定内容时静态是好的,但有一天我们需要在他的代码之上添加功能。哎呀我们必须修改ori代码,因为他使用了大量的静态内容,而且我们不能继续使用它。
class test {
public static function test1() {
echo 'hi';
}
}
test::test1();
为什么要使用静态功能?何时使用它而不使用静态功能?
答案 0 :(得分:2)
当函数不依赖于应用该方法的特定对象时,可以使用static。这适用于您的应用程序取决于其设计。
例如,如果您有一个处理日期和时间的类,并且它包含一个返回当前时间戳的函数,则不需要将其应用于特定日期对象 - 对于任何日期它都是相同的。所以它可能是一个静态函数。
如果您需要在创建类的任何实例之前运行某些函数,则可能需要静态函数。如果使用工厂模式,则将首先使用方法创建实例。这必然是一种静态方法。
答案 1 :(得分:1)
如果您需要一个函数而不调用Class构造函数,则可以使用静态函数。 例如,我有一个这样的类:
class Animal {
.............
.........
private function name() {
// This will print name of Animal that you assign through $this
echo $this->$name;
}
}
Animal->name();
在另一种情况下,您希望为您的类实现一个不需要$ this的函数。第二个:
class Animal {
.............
.........
public static function splitName($name) {
// In this case your source is assigned by parameter, not by $this
echo explode("-",$name);
}
}
Animal::splitName();
如果你是初学者,那就容易记住'如果你使用静态功能,数据源来自param。然后对于私人功能,数据来自$ this'......得到了吗?通过评论更多地问我,詹姆斯
答案 2 :(得分:0)
作为一般经验法则,最好尽可能远离静态代码。当您开始使用静态调用时,您将紧密耦合该类到您的代码中。这使得以后在想要替换模拟类的静态类时很难测试代码。在大多数情况下,最好使用依赖注入。
也就是说,就像糖和盐一样,静态代码也有它的位置,如果你小心并正确使用它,你可以拥有适合你的静态代码的应用程序。例如,单例模式依赖于静态方法来获得对单例本身的引用。静态方法适用于不需要依赖任何类状态的基本实用程序函数。
最后,最好远离它们。有些人称他们是邪恶的(他们不是),但是如果你使用它们,至少要花时间探索为什么你正在使用它们,如果静态类的设计比混凝土更好一个针对您的特定用例。