PHP面向对象之static(静态)关键字
一 相关介绍
static : 需要一个数据对象只服务于类,即类内部可用,对外不可用时。建对象是极其耗费资源的,因此当一个方法具有比较强的公用性时,没有必要为了调用这个方法而重新再生成该类的实例。定义的方法或变量在程序第一次加载即驻留内存,程序结束释放。(静态方法不能被非静态方法重写,构造方法不允许声明为staic)
static变量:通过static声明的成员变量为静态变量或叫类变量,是该类的公共变量,在第一次使用时即生成,对于该类的所有对象只有一份,是属于类的,不是属于对象的。static变量是属于类而不属于对象,可以在任何地方通地类来访问,是类的全局变量,类创建时即存入内存。对多个对象来说,静态数据成员只存储一处,可以节省内存。只要对静态数据成员的值更新一次,保证所有对象存取更新后的相同的值。
static方法:用static声明的方法为静态方法或叫类方法,执行该方法时不会将对象引用传给函数,所以我们不能访问非静态成员,只能访问静态方法或静态变量。只能使用关于类的方式如self static parent等。使用时不生成对象即可执行
二 Example
###静态变量
1 2 3 4 5 6 7 | function foo(){ static $bar = 0; $bar ++; echo $bar ; } foo(); //output : 1 foo(); //output : 2 |
1 2 3 4 5 6 7 8 9 | class foo{ public static $bar = 0; public function foos(){ self:: $bar ++; echo self:: $bar ; } } ( new foo())->foos(); //output : 1 ( new foo())->foos(); //output : 2 |
###静态属性拓展
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | class db{ public static $link = null; public function __construct(){ if ( is_null (self:: $link )){ self:: $link = $this ->connect(); } } public function connect(){ echo '连接一次,消耗一次资源' ; return true; } } new db(); //output : '连接一次,消耗一次资源' new db(); //output : '' new db(); //output : '' |
###静态方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | class foo{ /* *静态调用无法触发构造方法 */ public function __construct(){ echo '构造方法已执行' ; } /* *静态方法中不能使用$this 所以只能调用静态方法 */ public static function bar(){ self::foos(); } public static function foos(){ echo '静态方法被调用了' ; } /* *非静态方法中可以调用静态方法 */ public function test(){ echo '非静态方法被调用了' ; self::foos(); } } foo::bar(); //output : '静态方法被调用了' ( new foo())->test(); //output : '构造方法已执行 非静态方法被调用了 静态方法被调用了' |

发布评论
还没有评论,快来抢沙发吧!