2012-11-23 3 views
0

배열 속성을 구현하는 클래스가 있습니다. 그 속성에 두 개의 객체를 설정하려고합니다. 요청 흐름 중에 여러 번 완료 될 것이므로 정적으로 선언됩니다. 그리고 그것은 싱글 톤 클래스가 아닙니다.PHP의 정적 메서드 수명

두 번째로 이것을 추가 할 때 해당 클래스의 속성이 이전 값을 유지합니까? 이 좋습니다

class Foo { 
    public static $bar = []; 
    public static function add($value) 
    { 
     Foo::$bar[] = $value; 
    } 
} 

:

/* file1.php */ 
Foo::add('value1'); 
include 'file2.php'; 

/* file2.php */ 
... 
Foo::add('value2'); 

Foo의 정의입니다 :

이 예는 (이 아무것도를 변경하는 경우, 정적 방법을 통해 이루어집니다 부가하는) ? 여기서 싱글 톤이 더 좋습니까? 이 문제를 해결할 다른 방법이 있습니까?

+0

정적 메서드를 호출하기 전에 클래스를 선언해야하므로 file2가 올바르지 않습니다. – Palantir

+0

예, 값을 유지합니다. 그러나 이것과 싱글 톤은 모두 전역 변수를 나타내는 멋진 방법이며 전역 변수는 OOP에서 좋은 방법으로 간주되지 않습니다. – lafor

+0

그걸 알지만, 정적이 아닌 클래스에 정보를 몇 가지 더 보관할 수 있을까요? . – khernik

답변

0

예. include()require() 문은 본질적으로 참조 된 파일의 내용을 명령문의 위치로 덤프합니다. 이 모든 것을 하나의 스크립트로 생각할 수 있습니다.

var_dump(Foo::bar);을 스크립트 끝에 추가하여 직접 질문을 테스트 할 수 있습니다.

싱글 톤 패턴을 사용하는 것은 번만 번 인스턴스화/초기화하려는 경우에만 실제로 필요합니다. 스크립트 내에서 추가 인스턴스를 원할 경우 일반 클래스로두고 원하는 작업을 수행하기를 원할 것입니다. 예 : Passing by reference.