2012-05-08 2 views
0

현재 클래스의 유형을 가져온 후 참조하여 정적 멤버 인 배열과 개수를 설정하려고 시도합니다. 의도는 내가로드 한 특정 유형의 모든 항목에 대한 전체 목록을 갖도록하는 것이지만 각 특정 클래스에 대한 정적 속성으로 나누기를 원합니다. 문제는 기본 클래스에서 몇 가지 클래스를 상속 받게 될 것이지만 '자식'클래스의 정적 속성을 추가해야합니다.동적으로 발견 된 클래스의 정적 멤버 설정

여기에 내가 쏘는거야 무엇을 제공하거나 걸릴 : PHP 5.3에서

$Class = get_class($this); 
($Class)::$List[($Class)::$Count++] = $this; 
+0

SO는 포럼이 아닌 Q & A 사이트입니다. 답변은 질문과 별도로 게시해야합니다. 또한, 코드는 VolkerK의 기능에 아무 것도 추가하지 않습니다. [빈 대괄호] (http://php.net/array) ('$ List [] = $ this')를 배열에 추가하면 정적'$ Count' 변수가 필요 없습니다. 또한 부모 생성자를 호출하기 위해 생성자를 재정의 할 필요도 없습니다. – outis

답변

1

이상에서는 재정의 정적 변수에 액세스 할 수 late static binding를 사용할 수 있습니다. 짧은 버전은 self이 아닌 static 또는 정적 변수에 액세스 할 때 클래스 이름을 사용한다는 것입니다. 예를 들면 다음과 같습니다.

<?php 
abstract class A { 
    public function __construct() { 
     static::$List[] = $this; 
    } 
} 

class B extends A { 
    public static $List = array(); 
} 

class C extends A { 
    public static $List = array(); 
} 
$b = new B(); 
$c1 = new C(); 
$c2 = new C(); 
$c3 = new C(); 

echo '#objects of class C: ', count(C::$List), "\n"; 
var_dump(C::$List); 

자식 클래스가 생성자를 정의하면 명시 적으로 부모의 생성자를 호출해야합니다.

+0

이미 고려되고 고려 된; 이게 효과가 있다면 많은 감사드립니다. – DigitalJedi805

+0

아름다운. 대단히 감사합니다. – DigitalJedi805

+0

내 편집을 한눈에 알 수있는 점에 감사드립니다. – DigitalJedi805