PHP学习之static

什么是static

static字面意思就是静态的,在PHP中,static是一个关键字,可以用来修饰变量和函数。

静态变量和动态变量的区别

静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在静态存储区内分配存储单元),该 区域中的数据在整个程序的运行期间一直占用这些存储空间(在程序整个运行期间都不释放),也可以认为是其内存地址不变,直到整个程序运行结束,静态变量虽在程序的整个执行过程中始终存在,但是在它作用域之外不能使用。

 auto自动变量,即动态局部变量,属于动态存储类别,占动态存储空间,函数调用结束后即释放。

静态变量的声明和初始化:

<?php
function test(){}
class Test{}
$b = 1;
static $a;
static $a = 1;
static $a = 1 + 2;
static $a = $b; //Fatal error: Constant expression contains invalid operations
static $a = test(); //Fatal error: Constant expression contains invalid operations
static $a = new Test(); //Fatal error: Constant expression contains invalid operations
/*********正确的使用方式如下*****************/ static $a;
$a = $b;
$a = test();
$a = new Test();

静态函数和动态函数的区别

静态函数是在类中使用staitc修饰的函数,在类定义的时候已经被装载和分配。而非静态函数是不加static关键字的函数,在类定义时没有占用内存,只有在类被实例化成对象时,对象调用该函数才被分配内存。

静态函数中只能调用静态成员或者方法,不能调用非静态函数或者非静态成员,而非静态函数既可以调用静态成员或者方法又可以调用其他的非静态成员或者函数。

注意:static只能修饰类中的函数。

static 在函数中的使用

首先,我们做一个测试

<?php
function staticTest()
{
    static $num = 0;
    echo $num++;
}
staticTest(); //0
staticTest(); //1
staticTest(); //2

我们可以看到,在调用函数的时候,static变量只初始化了一次,在项目中,我们可以用它来干什么呢,来看一个例子:

<?php

class Test {
    function __construct()
    {
        echo 1;
    }
    function get()
    {
        echo 2;
    }
}

function staticTest()
{
    static $a = false;
    if(!$a) {
        $a = new Test();
    }
    $a->get();
}
staticTest(); //12
staticTest(); //2
staticTest(); //2

在上面这个例子中,多次调用函数时,使用静态变量保存对象可以减少对new的调用,提高效率。

static 在类中的使用,既可以修饰类成员变量,又可以修饰函数:

 

posted @ 2018-01-16 22:13  沙漠海123  阅读(410)  评论(0)    收藏  举报