June 21st, 2008

Фас - говорит (недовольный)

(no subject)

Интересно, есть ли специалисты по PHP во френдах?

Интересует следующая вещь.

Допустим, у нас есть класс.
class Foo
{
protected static $bar = array();
public function __construct()
{
AddToBar("1");
}
final public static function AddToBar($what)
{
Foo::$bar[] = $what;
}
final public static function Print()
{
foreach(Foo::$bar as $key => $value)
echo $value;
}
}


Есть второй класс.
class Foo2 extends Foo
{
public function __construct()
{
AddToBar("2");
}
}


Теперь мы создаем два экземпляра класса.
$foo_ex = new Foo();
$foo_ex->Print();
$foo_ex2 = new Foo2();
$foo_ex2->Print();
$foo_ex->Print();


Внимание, вопрос. Что же будет напечатано?
Собственно, суть вопроса в том, являются ли статические переменные класса принадлежащими базовому и разделяемые между ним и всеми наследниками, или каждый класс-наследник имеет собственный экземпляр статических переменных (один на класс)?
И если первый вариант - как это побороть?