2013-10-20 4 views
0

두 클래스가 있습니다 : SuperObject 및 PageGenerator.하위 클래스의 부모 클래스 필드 가져 오기

PageGenerator (및 다른 클래스의 묶음)는 SuperObject를 상속하며 SuperObject는 데이터베이스 연결을 위해 'db_conn'이라는 필드를 가지고 있습니다.

그래서 내 코드는 같은 같습니다

class SuperObject { 
    protected static $db_conn = null; 
    public function __construct($db){ $this->db_conn = $db; } 
} 
class PageGenerator extends SuperObject { 
    public function some_function(){ 
     //something using parent::$db_conn; 
    } 
} 
// somewhere down the way 
$so = new SuperObject($db_object); 
$page = new PageGenerator(); 
$page->some_function(); 

을하지만 난 적어도 그 좋아하지 것을 할 수없는 가정합니다.

그럼 어떻게해야합니까?

public function some_function(){ 
    var_dump(self::$db_conn); //not parent::$db_conn; 
} 

을하지만 당신은 객체 (superobject)에서 제대로 초기화하기 없습니다 :

답변

0
class SuperObject { 
    protected static $db_conn = null; 
    public function __construct($db){ self::$db_conn = $db; } 
} 
class PageGenerator extends SuperObject { 
    public function some_function(){ 
     var_dump(self::$db_conn); 
    } 
} 
// somewhere down the way 
$page = new PageGenerator(new \stdClass()); 
$page->some_function(); 
+0

허. 와우, 그게 효과가있어. 이런 일을하는 데있어서 단점이 있습니까? – user2900816

+0

정적 속성은 클래스 속성이지만 객체는 아닙니다. 즉, 정적 속성의 값은 어떤 인스턴스에서 변경하면 각 클래스 인스턴스에 대해 변경됩니다. – romik

0

당신은 부모의 보호 정적 필드를 사용할 수 있습니다.

class SuperObject { 
    protected static $db_conn = null; 
    public function __construct($db){ self::$db_conn = $db; } 
} 
+0

을하지만 내가 피하고 싶은 클래스의 내부 부모의 생성자 함수를 호출하는 나를 필요 : 자기와 db_conn $ this-> :: $ db_conn를 교체합니다. – user2900816

+0

예, 정적 키워드가 누락되었습니다. 정답 위에 – ziollek

관련 문제