php静态方法和非静态方法分别什么时候使用?
非静态方法经常用,但什么时候该使用非静态方法呢?
类的静态方法最大的特点就是类不经过实例化就可以直接调用,注意静态方法不能访问类的非静态成员变量和方法.
这种感觉是什么,其实就是类似我们在结构化编程中直接调用函数.
比如下面两种写法是等价的:
//普通函数
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()
1 回答4.1k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
2 回答2.2k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
2 回答2.2k 阅读
1 回答610 阅读✓ 已解决
798 阅读
很好理解,能够拿起来就用的,就用静态实现,比如工具类。
你想用锤子,不可能先拿个锤子的模具制造出锤子之后再用吧,就是这么个意思。