Статические переменные класса в PHP 4

Rynor

stay hungry
Статические переменные класса в PHP 4

Уважаемые, помогите ...если с PHP 5 полегче, то с PHP 4 непонятно - возможно ли вообще? Мануал читал - не помогает.

PHP:
class Foo {
	
	function Foo() {
		static $bar  = 1;
	}
	
	function FooStatic() {
		return '2';
	}
	
}

echo Foo::FooStatic();
echo Foo::bar;
На последнюю строку получаю
Parse error: parse error, unexpected ';', expecting '('

Возможно ли обойти данную проблему без перехода на PHP 5? :) Можно через синглтон, но как-то это неизящно. Заранее благодарю за помощь.
 

itprog

Cruftsman
А мне вот непонятно при чем здесь PHP 5, статические переменные класса и тем более синглетон?
 

Rynor

stay hungry
по первым двум пунктам см. в мануале
Example 10.14. Static member example
PHP:
class Foo {
   public static $my_static = 'foo';
...
}

print Foo::$my_static . "\n";
по третьему - через синглтон я могу юзать переменные класса (впрочем, не обязательно статические) в других классах.
 

itprog

Cruftsman
Rynor
хорошо, Example 10.14. Теперь посмотри на свой код и скажи где у тебя там "Static member example"? Если ты объявляешь статическую переменную внутри метода , то почему она должна быть статическим членом класса?

Может лучше разобрать конкретную ситуацию, а не какие-то 1 и 2?
 

Rynor

stay hungry
Я не силен в ООП и статических переменных, поэтому мог написать и чушь в коде, первый раз оно часто так, а вот конкретная ситуация: необходимость использования переменных класса в других классах без необходмости создания объектов этого класса, т.е. мне нужно Foo::bar в PHP 4 :)
 

romy4

invoke [brain]
ты не можешь сделать
echo Foo::bar;
так как эта переменная доступна только внутри функции. читай "область видимости переменных"
 

Макс

Старожил PHPClub
Rynor
ты хочешь писать изящно или на ПХП4 ? ;)

Для ПХП4 в любом случае надо как-то извращаться.
1. С синглтоном ты вроде сам знаешь как делать
2. Можно через статические переменные функции эмулировать :
PHP:
class A {
    function vars() {
        static $vars = array()    ;
        $num = func_num_args();
        if ($num === 2) {
            list($key,$val) = func_get_args();
            $vars[$key] = $val;
        } elseif ($num === 1) {
            list($key) = func_get_args();
            return (isset($vars[$key])) ? $vars[$key] : null;
        } else {
            return $vars;
        }
    }
}

A::vars('aaa',1);
print_r(A::vars());
A::vars('aaa', array(1,2,3,4,5));
print_r(A::vars());
var_dump(A::vars('aaa'))
 

Rynor

stay hungry
Я хочу изящно, но приходится И на PHP 4 :/
Спасибо за помощь, попробую этот способ!
 
Сверху