php静态方法和非静态方法分别什么时候使用?

php静态方法和非静态方法分别什么时候使用?

非静态方法经常用,但什么时候该使用非静态方法呢?

阅读 13.1k
7 个回答

很好理解,能够拿起来就用的,就用静态实现,比如工具类。

你想用锤子,不可能先拿个锤子的模具制造出锤子之后再用吧,就是这么个意思。

类的静态方法最大的特点就是类不经过实例化就可以直接调用,注意静态方法不能访问类的非静态成员变量和方法.
这种感觉是什么,其实就是类似我们在结构化编程中直接调用函数.
比如下面两种写法是等价的:

//普通函数
function db() {
    static $db; //静态变量避免重复连接
    if ($db) {
        return $db;
    } else {
        $db = new mysqli('127.0.0.1','root','ec5a23efb5cae6d4292b','mysql',3306);
        return $db;
    }
}
//因为静态变量,两次调用函数只会产生一次new mysqli.
var_export(db()->query('show tables')->fetch_all());
var_export(db()->query('show tables')->fetch_all());

//静态方法
class db {
    private static $db;
    public static function get_db() {
        if(self::$db) {
            return self::$db;
        } else {
            self::$db = new mysqli('127.0.0.1','root','pass','mysql',3306);
            return self::$db;
        }
    }
}
var_export(db::get_db()->query('show tables')->fetch_all());
var_export(db::get_db()->query('show tables')->fetch_all());

静态方法的优点是什么?

1、生命周期和程序一样
2、不需要初始化

比如你写了一个耦合很低的函数Tool,这个时候你可以封装一个建议的静态方法sendMail。
那么你调用就很方便了:

Tool::sendMail()

我觉得全部使用magic方法写成静态调用的样子你就不纠结了。。。

作用域问题看看

Google 百度

这种问题没必要在这里问

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题