首页 > 编程 > PHP > 正文

PHP类的静态成员变量和普通成员变量对比

2020-03-22 16:38:52
字体:
来源:转载
供稿:网友
  • 有很多人可能弄不清楚,在PHP中类的静态成员变量和普通成员变量有什么区别?

    1、类的静态方法只能访问静态成员变量,而不能访问非静态成员变量

    2、静态成员变量不需要实例化就能访问,且访问速度快一些

    3、类的静态成员变量只属于这个类,但类的所有实例共享这个静态成员变量

    一个由 c/c++编译过的程序占用的内存分为一下几个部分

    (1)、栈区 stack :

    由编译器自动分配释放,存放函数的参数值,局部变量的值等。这个栈的操作方式类似于数据结构中的栈。栈区是在程序运行前就会分配好的,速度较堆要快

    (2)、堆区 heap :

    一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收,注意它与数据结构中的堆是两回事,分配方式类似于链表。是在程序运行时动态分配的,速度较栈慢

    (3)、全局区(静态去)html' target='_blank'>static

    全局变量和静态变量的存储是放在一块的。初始化的全局变量和静态变量在一块区域,未初始化的全局变量和静态变量又放在相邻的另一块区域中。程序结束后由系统释放。

    (4)、文字常量区 :

    常量字符串放在这里。程序结束后由系统释放。

    (5)、程序代码区 :

    存放函数体的2进制代码。

    下面咱们一起来做个小例子:

    class A{    public static $a = 5;    public $b = 4;    public function getA(){        return A::$a;    }    public function setA($val){        A::$a = $val;    }    public function getB(){        return $this->b;    }    public function setB($val){        $this->b = $val;    }    public static function getbb(){        return $this->a;    }}

    $a = new A();echo $a->getA();$a->setA('aaaa');echo '<br/>';$b = new A();echo $b->getA();echo '<br/>';$c = new A();echo $c->getA();
    上面的执行结果会是:5 aaaa aaaa

    类的对象$a将类的静态成员变量值修改后,由于类的所有实例对象共享静态成员变量,所以其他对象在获取静态成员变量值时就会发生改变。

    $a = new A();echo $a->getB();$a->setB('aaaa');echo '<br/>';$b = new A();echo $b->getB();

    上面的执行结果是:4 4

    echo A::getbb();

    会发生报错,因为类的静态方法只能访问静态成员变量

    PHP编程

    郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

  • 发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表