PHP 静态属性经子类修改后将影响同父类静态属性

如果我们在一个父类中定义了一个静态属性,继承的子类中并未对该属性重新定义,那么也就意味着这两个类实际共用了同一个静态属性,因为静态属性属于类,而非对象。这种情况下,如果子类对静态属性做了修改,那么也意味着父类的静态属性也被同步修改了,而其他继承自该父类的兄弟类中的静态属性也全部被修改了。所以在实际开发中,对静态属性的定义一定要非常谨慎。

class Demo {
	public static $test = '原始';

	public function set_test($test) {
		static::$test = $test;
	}

	public function test() {
		echo static::$test;
	}
}

class Demo_1 extends Demo {

}

class Demo_2 extends Demo {

}

$demo = new Demo_1;
$demo->set_test('修改');
$demo->test();

$demo = new Demo;
$demo->test();

$demo = new Demo_2;
$demo->test();

上述代码,将全部输出“修改”。

当前余额:¥ 0.00  本次消费:¥ 0.00