单纯的语法上是没有什么问题的但对静态方法和非静态方法的使用场景什么情况下该用什么希望大家能讲解下我现在的使用情况是: 基本上都是实例方法, 除了单例, 工厂, 几个设计模式时使用!其他的时机完全不知道怎么搞!
认证高级PHP讲师
附加个例子,如果能写出答案,也会懂什么时候要用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();
写接口的时候对外暴露的方法用静态的。
如果你的类是需要实例化的,并且你的的方法是实例之间发生作用,那么事实上你“只能”使用非静态方法如果你希望暴露一些什么地方都不会改变的,全局可用的方法,那么使用静态方法(场景上会让你感觉像是在调用一个全局可用的函数)
这里还有个陷阱是静态类和单例的区别,它们可能都是提供一个全局的"唯一"对象,并且暴露一些方法给外部使用它们的场景区别是,如果你的这个唯一对象需要维持一定的状态,或者实现某个接口或者继承某个类,或者集成在某个类中,那么使用单例如果你的这个对象仅仅就是提供全局访问,不涉及到状态,那么使用静态类静态方法
不需要实例化对象的都可以用静态方法~
附加个例子,如果能写出答案,也会懂什么时候要用static了
写接口的时候对外暴露的方法用静态的。
如果你的类是需要实例化的,并且你的的方法是实例之间发生作用,那么事实上你“只能”使用非静态方法
如果你希望暴露一些什么地方都不会改变的,全局可用的方法,那么使用静态方法(场景上会让你感觉像是在调用一个全局可用的函数)
这里还有个陷阱是静态类和单例的区别,它们可能都是提供一个全局的"唯一"对象,并且暴露一些方法给外部使用
它们的场景区别是,如果你的这个唯一对象需要维持一定的状态,或者实现某个接口或者继承某个类,或者集成在某个类中,那么使用单例
如果你的这个对象仅仅就是提供全局访问,不涉及到状态,那么使用静态类静态方法
不需要实例化对象的都可以用静态方法~