关于静态属性
- 最简单直接:
- 静态方法也是一样
看了很多关于静态和动态的说法,无非是从 调用方式, 类访问实例变量, 访问静态变量, 需不要实例化这几个方向,太空了。问使用场景,好一点的 能说个用来做单例。逆天的还有说什么字符串作用,语义明确,修改方便,那我直接写个常量不行吗?这种属于是自己也没完全理解静态的含义,就教教教
最简单直接:
<?php
class demo
{
static protected $array = [];
public function __construct()
{
self::$array[] = spl_object_id($this);
}
public function getArray(): array
{
return self::$array;
}
}
$demo1 = new demo();
$demo2 = new demo();
$demo3 = new demo();
$demo4 = new demo();
$demo5 = new demo();
print_r($demo1->getArray());
print_r($demo2->getArray());
print_r($demo3->getArray());
print_r($demo4->getArray());
print_r($demo5->getArray());
结果:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
)
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
)
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
)
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
)
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
)
你会发现,他们各自的实例化,调用的$array是共享的,所以你可以理解为什么做单例可以使用静态属性。
因为静态变量在 PHP 中是属于类本身的,而不是某个具体的对象实例,且一声明就被存储在栈中,是全局的。它们在内存中只存储一份,所有对象共享同一个静态属性。静态属性的生命周期与类相同,只要类被加载到内存中,静态属性就会存在,直到程序结束或类被卸载。