가능한 중복 :
Access variable in classPHP에서 클래스 - 전역 변수를 얻는 방법은 무엇입니까?
I 클래스에 대한 몇 가지 캐싱 기능을 구축하고있어 모두 동일는 "클래스 전역"배열, 즉 배열을 싶습니다 인스턴스가 아니라 상수. 어떻게 할 수 있습니까?
가능한 중복 :
Access variable in classPHP에서 클래스 - 전역 변수를 얻는 방법은 무엇입니까?
I 클래스에 대한 몇 가지 캐싱 기능을 구축하고있어 모두 동일는 "클래스 전역"배열, 즉 배열을 싶습니다 인스턴스가 아니라 상수. 어떻게 할 수 있습니까?
귀하의 솔루션은 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'));
// ...
?>
글로벌 변수가 악조건에 대해 언급하십시오. –
@Truth는 질문이 아니었다 ... – thedom
그것은 추가 정보로 언급 할 가치가있다. 유일한 해결책이 나쁘다는 대답을 할 때 대답으로 지정합니다. (굵게, 기울임 꼴, 큰 회색 배경, 실제로 대문자로 된 문자 : P) –
정적 변수로 얻을 수 있습니다.
하지만 글로벌 상태가 좋지 않기 때문에 솔직히해서는 안됩니다.
당신이 그것을 같은 것을 보일 것해야하는 경우 : 당신은 클래스 자체 또는 서브 클래스, 및 SomeClass::$var
또는 외부에서 $ instanceOfSomeClass::$var
내에서 self::$var
또는 static::$var
에 액세스 것
class SomeClass
{
static public $var = array();
}
합니다.
캐시 된 SQL 결과가 어떻게 전역이 될 수 있습니까? – Andreas
해당 정보가 관련된 시스템 비트에만 특정 결과가 필요합니다. 나머지 시스템은 알 필요가 없으며 나중에 특정 데이터에 액세스하지 않아야하는 시스템 부분이 실제로 실제로 문제를 일으킬 수 있습니다. 그것은 또한 다른 많은 문제들을 소개합니다. http://programmers.stackexchange.com/questions/148108/why-is-global-state-so-evil – GordonM
.. 그게 내가 관련 수업에 넣는 이유입니다. – Andreas
'public static $ someName' :? 당신이 달성 한 구체적인 문제는 무엇입니까? Btw : "클래스 전역 변수"가 아닌 "정적 속성"입니다.) – KingCrunch
클래스 정적 변수를 찾으려고합니다. http://php.net/manual/en/language.oop5.static.php – FatalError
Ooh, 'static'을 사용할뿐 아니라 로컬 변수 (MyClass :: $ CACHE 대신 $ CACHE)를 사용했습니다. – Andreas