2009-07-29 5 views
7

PHP가 다른 언어에서 정적처럼 작동하는 클래스에서 변수 유형을 가지고 있는지 궁금합니다. 그리고 그것은 동일한 클래스의 모든 객체가 동일한 변수를 사용한다는 것을 의미하며 하나가 업데이트되면 모든 객체에서 업데이트됩니다. Static은 모든 객체에서 공유되기 때문에 닫기는 가능하지만 업데이트 할 수 있어야합니다. 이를 위해 전역을 사용해야합니까?다른 언어의 정적 변수에 해당하는 PHP는 무엇입니까?

+0

정적 속성을 언제 업데이트 할 수 있습니까? – jason

+0

정적 변수를 수정할 수 있습니다 ... –

+2

Const 변수는 수정할 수 없습니다. 정적 변수가 될 수 있습니다. – Extrakun

답변

3

나는 정적 당신이 원하는 것을 생각합니다. . 당신은 즉, :: 연산자를 사용하여 (당신은 단지 "정적 컨텍스트"그것을해야 할 정적 변수를 업데이트 할 수 있습니다

class Class1 { 
    protected static $_count = 0; 

    public function incrementCount() { 
     return self::$_count++; 
    } 
} 

$instance1 = new Class1(); 
$instance2 = new Class1(); 
var_dump($instance1->incrementCount(), $instance2->incrementCount()); 

출력됩니다 :.

INT 0

INT 1

+0

이것이 문제였습니다. 나는 $ 대신 this를 사용했다. – fent

0

PHP 파일에 Constants라는 변수를 만들면됩니다.

--Constants.php-- $ DATABASE_NAME = "MySQL은"

및 파일에 파일을 포함한다. 그 값을 변경할 수 있습니다. 그것은 당신이 원하는 것에 가깝지만, 상수가 변경되지 않기 때문에 상수 라 부르는 것이 좋지 않습니다. 그것은 저를 혼란스럽게합니다. :)

0

static 변수를 설명하는 것에 대해 작동하지 않는 이유는 모르겠지만 (final 키워드와 아무런 관련이 없음)?

<?php 

class Bla 
{ 
    public static $var; 

    public function __construct() 
    { 
     Bla::$var = Bla::$var + 1; 
    } 
} 

$test = new Bla(); 
echo Bla::$var; // 1 
$test = new Bla(); 
echo Bla::$var; // 2 

?> 
1

당신 갱신 정적 속성 :

class A { 
    protected static $_foo = 0; 

    public function increment() 
    { 
     self::$_foo++; 
    } 

    public function getFoo() 
    { 
     return self::$_foo; 
    } 
} 


$instanceOne = new A(); 
$instanceTwo = new A(); 


$instanceOne->getFoo(); // returns 0 

$instanceTwo->increment(); 

$instanceOne->getFoo(); // returns 1 
0

나는. static당신이 찾고있는 키워드입니다

생각 그리고 01을 방지 아무것도 없다beeing의 "updated"속성은 PHP에서 설정되었습니다 : PHP 스크립트가 실행되는 동안 처음 초기화되고 PHP 스크립트를 실행하는 동안 값을 유지하지만 새로운 값으로 설정할 수 있습니다.

6

정답은 최종적으로 PHP에 상응하는 것이 없다는 것이지만 정적 인은 어쨌든 처음에 원하는 것처럼 보입니다.

정적은 특정 인스턴스와 연결되어 있지 않으므로 클래스의 모든 인스턴스에서 동일한 값을 갖게됩니다.

고정되고, 당신은 사용할 수 없기 때문에 당신이 그것을 액세스 할 수 :: 연산자를 사용해야합니다 ->합니다.

관련 문제