首页 > Web开发 > 详细

PHP中的静态关键字-Static

时间:2016-08-08 14:14:09      阅读:192      评论:0      收藏:0      [点我收藏+]

当初去盛大笔试的时最后有两道题目,一道题目是关于Static,一道是关于clone()方法;

Static表示的是静态关键字,可以修饰变量和方法

静态变量(属性):

静态变量可以理解为“只有一个”,无论它所在的类创造多少个实例,它始终只有一个,在内存中只有一份,为所有的实例共用。

下面是例子:

<?php
class dome{
public static $var = 1;
public function myfun(){
echo "var is ".self::$var."!";
}
}
echo "var is ".dome::$var."!";
dome::$var = 2;
$obj = new dome();
$obj->myfun();
?>

运行结果如下:

技术分享

可以看到,在未创建dome类的对象时,我们改变了静态熟悉var的值,创建dome类对象后var依然是最后改变它的数值。

如果不使用静态变量:

<?php
class dome{
public $var = 1;
public function read(){
echo $this->var."\n";
}
public function change(){
$this->var = 9;
}
}
$obj = new dome();
$obj->read();
$obj->change();
$obj->read();
$obj2 = new dome();
$obj2->read();
?>

我们可以看到:

技术分享

每次创建一个新的对象,内存会重新分配新的地址和初始化的属性。

静态熟悉非静态熟悉还有一个不同:

<?php
class dome{
public static $var = 1;
}
echo dome::$var."\n";
?>

运行结果如下:
技术分享

在类外可以直接用::调用,非静态不行(废话);并且静态熟悉不可以使用this来调用,原因就是静态熟悉不属于任何对象。静态属性不可以由对象通过 -> 操作符来访问。

静态方法:

我搜索了半天,网上大多数教程都这么说:

静态方法与非静态方法的重要区别是:静态方法不需要创建对象即可访问。

好吧,我亲自测试,发现非静态也可以调用:

技术分享

并且非静态和静态方法都可以调用静态资源,但是有一点是可以肯定的,静态方法是无法调用非静态资源的,因为没有this的为对象可供调用。

但是如果使用::直接调用非静态方法,必须确保该方法内没有调用非静态熟悉(废话)。

静态关键字:

static 关键字,这里作为作用域引用。类似于parent, self等关键字。与parent和self不同的是,parent 引用的是父类作用域,self引用的是当前类的作用域,而static引用的是全部静态作用域,子类会覆盖父类,考虑下面的例子:

技术分享

 

最后,本人的博客移至http://www.ebwill.com

 

PHP中的静态关键字-Static

原文:http://www.cnblogs.com/ebwill/p/5748803.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!