기본 클래스에서 기본 클래스를 확장하는 클래스에서 정적 변수 세트를 사용할 수 있어야합니다. PHP 5.2에서 클래스 상속 : 확장 클래스에서 정적 변수를 재정의 하시겠습니까?
이를 고려 는class Animal {
public static $color = 'black';
public static function get_color()
{
return self::$color;
}
}
class Dog extends Animal {
public static $color = 'brown';
}
echo Animal::get_color(); // prints 'black'
echo Dog::get_color(); // also prints 'black'
이것은 PHP의 5.3.x에서 훌륭하게 작동 (Dog::get_color()
인쇄 '갈색')가 결합 늦게 정적이 있기 때문에. 하지만 프로덕션 서버는 PHP 5.2.11을 실행하므로 스크립트를 수정해야합니다.
이 문제를 해결하기위한 다소 멋진 해결 방법이 있습니까?
건배!
크리스토퍼
편집 : 아래에 언급 한 바와 같이 목표
이 내가 달성하기 위해 노력하고 무엇을 매우 단순화 된 예입니다. 내가 문제 (그리고 문제 자체)를 해결하는 데 사용했던 두 가지 옵션을 제공하면 누군가가 다른 해결책을 가질 수 있습니다 ...
"찾기"와 같은 기능을 가진 기본 데이터베이스 모델을 구축했습니다. , "find_by"및 "find_all"(모두 정적 임).
PHP 5.3에는 현재 호출 된 클래스의 이름을 확인하고 올바른 데이터베이스 테이블에 매핑하는 데 사용하는 get_called_class()
이라는 함수가 있습니다. Ex 클래스 User
은 users
을 가리 킵니다.
get_called_class()
은 PHP 5.2.x에는 존재하지 않으며 내가 발견 한 해킹 구현은 매우 신뢰할 만합니다. 그런 다음 클래스 이름을 포함하는 모든 모델 클래스에서 정적 변수를 사용하는이 옵션을 사용했습니다.
내가'Dog'가'Animal'을 확장해야 같은데요? –
당신은 절대적으로 맞습니다 :) – Christoffer
더 설명하면, 행 클래스의 정적이 아닌 테이블 클래스의 메소드로 찾기/찾기 함수를 넣어야한다고 생각합니다 (이것은 여러분이 시도하는 것처럼 들리는 것입니다). – gnarf