Вот в C# есть кроме обычного конструктора статический конструктор. суть его в том что при любом ПЕРВОМ обращении к статическим свойствам класса перед этим обращением выполняется статический конструктор. В котором определяются свойства для класса.
Похоже, что никак. Чтобы перед обращением к статическому свойству отработал какой-либо метод (статический конструктор), нужен аналог "магического" метода __get() для статических свойств, а такой в PHP отсутствует. Более того, даже если бы такой метод был, он бы не срабатывал если статическое свойство уже определено в классе, пришлось бы принудильно делать unset() для всех статических свойств, что приведёт к
ошибке.
Поэтому вижу только один выход: обращайтесь к статическим свойствам через статические get-методы, в которых уже и вызывайте "статический конструктор".
<?php
class Test
{
static public $foo = 1;
static public $bar = 1;
static public function getFoo()
{
return static::__getStatic('foo');
}
static public function getBar()
{
return static::__getStatic('bar');
}
/**
* Вызывает __constructorStatic() при первом обращении
* и возвращает значение статического свойства $name.
*
* @param string $name Имя статического свойства класса.
*/
static protected function __getStatic($name)
{
static $called = false;
if (!$called) {
$called = true;
self::__constructorStatic();
}
return static::${$name};
}
/**
* "Статический конструктор" класса.
*/
static private function __constructorStatic()
{
static::$bar++;
static::$foo++;
}
}