首页 >后端开发 >php教程 >php:static静态变量和普通变量的区别分析

php:static静态变量和普通变量的区别分析

黄舟
黄舟原创
2017-07-02 12:00:172014浏览

1、在变量的前面加上static 就构成了静态变量(static 变量)。
2、static变量和普通变量的区别在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。
3、static变量和普通变量的区别:
static全局变量与普通全局变量区别:static全局变量只初使化一次,防止在其他文件单元中被引用;
static局部变量和普通局部变量区别:static局部变量只被初始化一次,下一次依据上一次结果值;
static函数与普通函数区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝。
4、在全局变量之前加上关键字static,全局变量就被定义成为一个全局静态变量。
1)内存中的位置:静态存储区(静态存储区在整个程序运行期间都存在)
2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)
3)作用域:全局静态变量在声明他的文件之外是不可见的。准确地讲从定义之处开始到文件结尾。
5、static 变量的好处:
不会被其他文件所访问,修改
其他文件中可以使用相同名字的变量,不会发生冲突。
内存中的位置:静态存储区
初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)
作用域:作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域随之结束。

注:当static用来修饰局部变量的时候,它就改变了局部变量的存储位置,从原来的栈中存放改为静态存储区。但是局部静态变量在离开作用域之后,并没有被销毁,而是仍然驻留在内存当中,直到程序结束,只不过我们不能再对他进行访问。
当static用来修饰全局变量的时候,它就改变了全局变量的作用域(在声明他的文件之外是不可见的),但是没有改变它的存放位置,还是在静态存储区中。

 static 是定义一个静态对象或静态变量,关于static 定义的变量或类方法有什么特性我们看完本文章的相关实例后就见分晓了。
  1. 创建对象$object = new Class(),然后使用”->”调用:$object->attribute/function,前提是该变量/方法可访问。
  2. 直接调用类方法/变量:class::attribute/function,无论是静态/非静态都可以。但是有前提条件:
  A. 如果是变量,需要该变量可访问。
  B. 如果是方法,除了该方法可访问外,还需要满足:
  b1) 如果是静态方法,没有特殊条件;
  b2) 如果是非静态方法,需要改方法中没有使用$this,即没有调用非静态的变量/方法,当然,调用静态的变量/方法没有问题。
  然后我们再看一下使用$object->… 和使用class::… 都有什么区别:
  1. 使用$object->… ,需要执行构造函数创建对象;
  2. 使用class::… 调用静态方法/变量,不需要执行构造函数创建对象;
  3. 使用class::… 调用非静态方法/变量,也不需要执行构造函数创建对象。
  然后奇怪的地方就出来了,既然2和3都一样,那静态方法/变量存在还有什么意义呢?
  静态 static
  声明类成员或方法为 static ,就可以不实例化类而直接访问,不能通过一个对象来访问其中的静态成员(静态方法除外)。静态成员属于类,不属于任何对象实例,但类的对象实例都能共享。

以上是php:static静态变量和普通变量的区别分析的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn