2012-07-27 2 views
0

Можно создать дубликат:
Access variable in classКак получить глобальную переменную класса в PHP?

Я строй некоторых функций кэширования для класса и хотел бы «класс-глобального» массив, то есть массив, который является тем же самым во всех экземпляров, но не постоянных. Как это может быть сделано?

+1

'public static $ someName':? Какова конкретная проблема, которую вы достигли? Btw: это «статическое свойство», а не «глобальная переменная класса»;) – KingCrunch

+1

вы, вероятно, ищете статическую переменную класса http://php.net/manual/en/language.oop5.static.php – FatalError

+0

Ooh, I_was_ using 'static', но также и локальная переменная (' $ CACHE' вместо 'MyClass :: $ CACHE') – Andreas

ответ

-1

Ваше решение является переменной static!

<?php 
// ... 
class Foo { 
    public static $array; 


    public static function addValue($key, $value) { 
    self::$array[$key] = $value; 
    } 

    public static function getArrayKey($key) { 
    if(isset(self::$array[$key])) { 
     return self::$array[$key]; 
    } 
    } 
} 

Foo::addValue('foo', 'bar'); 
echo(Foo::getArrayKey('foo')); 
// ... 
?> 
+0

По крайней мере, упоминайте что-то о глобальных переменных, являющихся злыми. –

+0

@Truth это не вопрос ... – thedom

+0

Это не было, но стоит упомянуть в качестве дополнительной информации. Когда я даю ответ, единственным решением которого является зло, я указываю его в ответе. (Полужирный, выделенный, большой, серый фон, заглавные буквы: P) –

0

Вы можете достичь этого с помощью статических переменных.

Но вы честно не должны, потому что глобальное состояние не очень хорошо.

, если вы должны, это будет выглядеть примерно так:

class SomeClass 
{ 
    static public $var = array(); 
} 

Вы бы доступ к нему с self::$var или static::$var внутри самого или подкласса, и SomeClass::$var или $ instanceOfSomeClass::$var за пределами класса.

+0

Как кэшированные результаты SQL могут быть чем угодно, но глобальными? – Andreas

+0

Вам нужен только конкретный результат для битов системы, в которых эта информация имеет значение. Остальной системе не нужно знать, и это может привести к возникновению реальных проблем в дальнейшем, если на самом деле части системы, которые не должны иметь доступ к конкретным данным. Он также вводит множество других проблем. http://programmers.stackexchange.com/questions/148108/why-is-global-state-so-evil – GordonM

+0

.. Именно поэтому я помещаю его в соответствующий класс. – Andreas

Смежные вопросы