基底クラスのstaticメンバ変数を複数のクラスから利用し、それを変更すると他のクラスにも影響します。
<?php
class base {
protected static $super_value = "super value\n";
public function printValue() {
echo self::$super_value;
}
}
class extClassA extends base {
}
class extClassB extends base {
public function setValue($value) {
self::$super_value = $value;
}
}
$obj_a = new extClassA();
$obj_a->printValue(); // print "super value"
$obj_b = new extClassB();
$obj_b->printValue(); // print "super value"
$obj_b->setValue("NEW value\n");
$obj_b->printValue(); // print "NEW value"
$obj_a->printValue(); // print "NEW value" ...先にインスタンス化されていてもstatic変数は影響を受ける。
これをstaticメソッド化したものも挙動は同様です。
<?php
class base {
protected static $super_value = "super value\n";
public static function printValue() {
echo self::$super_value;
}
}
class extClassA extends base {
}
class extClassB extends base {
public static function setValue($value) {
self::$super_value = $value;
}
}
extClassA::printValue(); // print "super value"
extClassB::printValue(); // print "super value"
extClassB::setValue("NEW value\n");
extClassB::printValue(); // print "NEW value"
extClassA::printValue(); // print "NEW value" ...先にインスタンス化されていてもstatic変数は影響を受ける。
より詳しいことはこちらの記事が大変参考になります。
http://qiita.com/trashtoy/items/f4e2a97765e620bb2828