static变量

static变量

php类中关于static变量的一些知识点。

访问测试

并不能通过类的实例对象,通过->运算符,来直接访问静态变量。

<?php
/**
 * 2020-12-31 09:43:43
 * 静态变量的访问测试
 */

class Demo{
    public static $count = 10;
    public function getCount(){
        return self::$count;
    }
}

$demo = new Demo();

var_dump($demo->count);   //null 
var_dump($demo->getCount());  //10
var_dump(Demo::$count);       //10
var_dump($demo::$count);      //10

思考:

成员函数里面的static 是多个对象共同拥有?还是,该对象单独拥有?

<?php
/**
 * 2020-12-31 09:43:43
 * 静态变量的访问测试
 */

class Demo{
    public static $count = 10;
    public function getCount($num=null){
        static $count=1;
        if($num){
            $count = $num;
        }
        echo $count ."\n";
        return $count;
    }
}

$demo1 = new Demo();
$demo2 = new Demo();
$demo1->getCount(); //1
$demo2->getCount(); //1

$demo1->getCount(2); //2
$demo2->getCount();  //2

这说明,static 是全局变量,整体就一份。在代码初始化的时候,其值已经完成了初始化。

static变量,我愿意将其理解为:全局变量,但是访问作用域,可能限制在某个方法内,某个类中。