2012-02-29 4 views
7

이것은 내가 성취하고자하는 것을 단순화 한 것입니다.PHP에서 정적 변수 값을 변경하려면 어떻게해야합니까?

제 스크립트에는 스크립트가 실행될 때마다 true와 false로 변경되는 변수가 필요합니다.

<?php 
    static $bool = true; 

    // Print differente messages depending on $bool 
    if($bool == true) 
     echo "It's true!"; 
    else 
     echo "It's false!"; 

    // Change $bools value 
    if($bool == true) 
     $bool = false 
    else 
     $bool = true; 
?> 

분명히 내가하고있는 일이 잘못되었습니다. 변수 $bool은 항상 true이고 나는 정적 변수의 개념을 완전히 파악하지 못했습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

14

PHP는 요청간에 변수 값을 유지할 수 없습니다. 즉, 스크립트가 호출 될 때마다 $bool -variable이 true로 설정됩니다. 요청간에 값을 유지하려면 sessions을 사용하거나 세션간에 변수를 공유하려면 APC 또는 Memcache과 같은 일부 캐싱 메커니즘을 사용해야합니다.

또한 static은 PHP에서 클래스 수준에서 변수 공유를 선언하는 데 사용됩니다. 따라서 클래스에 사용되며 self::$variableName; 또는 Foo::$variableName

과 같이 액세스 할 수 있습니다. static properties here에 대한 자세한 내용을 볼 수 있습니다. 문서에서 :

클래스 속성이나 메서드를 정적으로 선언하면 클래스의 인스턴스화없이 액세스 할 수 있습니다. static으로 선언 된 속성은 인스턴스화 된 클래스 객체로 액세스 할 수 없습니다 (정적 메서드에서도 가능). 또한

는 단어 static는 PHP 5.3부터 과부하되어 있습니다, 또한 당신이 더 나은 점을 이해할 필요가 있다고 생각 static::

+0

흠 .. 그렇다면 정적 변수를 클래스로 옮기면 내 주 스크립트의 실행 사이에서 값을 앞뒤로 전환 할 수 있습니까? – Weblurk

+0

아니요, 제 답변을 참조하십시오. – BenM

+4

아니요. Static은 클래스 변수를 선언하는 데 사용하거나 함수 호출 내에서 지속되는 변수를 선언하는 함수 내에서 사용할 수 있지만 스크립트의 실행은 초과하지 않습니다. –

2

정적 값은 실행 동안 지속되지 않습니다. 스크립트가 실행될 때마다 $ bool이 초기화됩니다. 파일을 단순하게 유지하려면이 값을 유지해야한다고 생각합니다.

+0

나는 그것이 정적 변수의 핵심이라고 생각했다. 별도의 파일에 보관하지 않겠습니까? 아니면 유일한 해결책입니까? – Weblurk

+0

Memcache, APC, Redis, 파일 ... 원하는대로 사용할 수 있습니다. 그러나 변수의 현재 값을 어딘가에 저장해야합니다. –

2

를 사용하여, Late Static Binding을 표시 할 수 있습니다 정적 변수. 변수에 대한 저장소는 호출 스택에 할당 (할당 해제)되므로 소프트웨어 엔지니어링 관점에서 볼 때 런타임에 해당 값을 변경할 수 없습니다.

위에 제안 된 더 나은 해결책이 있습니다.

+1

사실, PHP의 정적 변수는 정적이 아닙니다. 해당 값은 실행 중에 변경 될 수 있습니다. 클래스의 공유 변수 일뿐입니다. – PatrikAkerstrand

+0

이렇게하면'class Lookup {protected static $ _cache = array(); ($ x) {self ($ x)}} self :: $ return {self} $ return {self} $ {cache} _ 캐쉬 [$ x];}}' – PatrikAkerstrand

관련 문제