2013-10-17 3 views
2

3 개의 PHP 클래스가 있습니다 : 추상 DBObject, 조직은 DBObject를 확장하고 University는 DBObject를 확장합니다.부모로부터 자식 객체 빌드

개체로드는 DB의 데이터 배열로 끝납니다. 생성자의 각 해당 배열에서 자신을 구축하는 방법을 알고, 그래서 나는이 시도 :

abstract class DBObject { 
    ... 
    public static function load($id) { 
     return new self(self::loader($id)); 
    } 
} 

자기 :: 로더 ($ 아이디)가 제대로 배열을 취득합니다. 나는 함수를 abstract() abstract로 만들고 각 코드에이 코드를 복사하여 붙여 넣을 수있다.하지만 위의 방법을 기대했다. 현재 오류 :

PHP Fatal error: Cannot instantiate abstract class DBObject in /var/www/htdocs/classes/DBObject.php on line 16 
+2

'새 정적 (...)' –

답변

1

찾고있는 것은 late static binding입니다. 대신 self의 당신은 static 키워드로 메서드가 호출되는 클래스를 참조하므로 전환하려면 : 하위 클래스에 DBOBJECT 로더 기능의 하위 클래스에서 호출 할 때 이제

abstract class DBObject { 
    ... 
    public static function load($id) { 
     return new static(static::loader($id)); 
    } 
} 

것 불리다.

관련 문제