PHP静态方法和非静态方法的使用场景

beleveme
  • 476

单纯的语法上是没有什么问题的
但对静态方法和非静态方法的使用场景
什么情况下该用什么希望大家能讲解下
我现在的使用情况是:
基本上都是实例方法, 除了单例, 工厂, 几个设计模式时使用!
其他的时机完全不知道怎么搞!

回复
阅读 8.5k
5 个回答

附加个例子,如果能写出答案,也会懂什么时候要用static了

class user {
    private static $count = 0;
    public function __construct() {
        self::$count = self::$count + 1;
    }
    public function getCount() {
        return self::$count;
    }
    public function __destruct() {
        self::$count = self::$count - 1;
    }
}
$user1 = new user();
$user2 = new user();
$user3 = new user();
echo $user1->getCount();
echo "<br />";
unset($user3);
echo $user1->getCount();

写接口的时候对外暴露的方法用静态的。

如果你的类是需要实例化的,并且你的的方法是实例之间发生作用,那么事实上你“只能”使用非静态方法
如果你希望暴露一些什么地方都不会改变的,全局可用的方法,那么使用静态方法(场景上会让你感觉像是在调用一个全局可用的函数)

这里还有个陷阱是静态类和单例的区别,它们可能都是提供一个全局的"唯一"对象,并且暴露一些方法给外部使用
它们的场景区别是,如果你的这个唯一对象需要维持一定的状态,或者实现某个接口或者继承某个类,或者集成在某个类中,那么使用单例
如果你的这个对象仅仅就是提供全局访问,不涉及到状态,那么使用静态类静态方法

静态方法是属于类的,与实例无关,一般公用的方法用静态方法

不需要实例化对象的都可以用静态方法~

你知道吗?

宣传栏