2012-09-01 4 views
0

PHP에서 변수를 사용하여 클래스 이름을 정의하고 싶습니다. 이것이 가능한가?변수에서 클래스 이름 만들기

설명해 드리겠습니다.

저는 최종 사용자가 테이블 이름의 접두어를 구성 할 수있게 해주는 작은 사용자 정의 CMS입니다. 따라서 사용자는 "rc_"와 같은 접두사를 정의 할 수 있습니다. 문제는 테이블 이름을 클래스로 사용하는 많은 모델이 있다는 것입니다. 내 테이블 중 하나는 rc_posts 경우 그래서, 예를 들어, 모델은

class MyModel_Rc_posts extends MyModelController { 
     // code here 
} 

같은 eval()를 사용하지 않고 PHP에서 변수를 사용하여 클래스를 정의 할 수있는 방법이 있나요 호출됩니다 :

class MyModel_{$PREFIX}posts extends MyModelController { 
// code here 
} 

이유는 내가 eval을 피하기를 원한다. 왜냐하면 이러한 클래스 중 일부는 꽤 오래 갈 수 있기 때문이다. 제안을 감사드립니다.

+0

정확한 복제 http://stackoverflow.com/questions/7438324/how-to-declare-a-php-class-with-a-variable-name – Peter

+0

코드 냄새가 감지되었습니다. 왜 도메인 객체를 묶어야합니까? 둘 다 완전히 다른 경우 테이블 이름에 이름 : 하나는 스토리지, 다른 하나는 도메인 모델입니다. = \ 정말로 이것을 원한다면 테이블 이름을 나타내는 속성을 가진'Table Data Gateway'가 있어야합니다. –

답변

2

class_alias을 살펴보세요.이 정보를 읽을 수도 있습니다.

"일반"이름으로 클래스를 만든 다음 필요에 따라 별칭을 추가하십시오. 별칭 이름은 임의의 문자열이 될 수 있으며 변수에 저장된 문자열을 포함합니다.

편집 class_alias()가 갈 수있는 방법이라고

내가 생각하는 동안은 여기없이 작업을 수행하는 방법에 대한 예입니다. 당신의 OQ에서

:

class MyModel_Rc_posts extends MyModelController { 
     // code here 
} 

이제

eval("class MyModel_{$PREFIX}posts extends MyModel_Rc_posts {};"); 

class_alias() 매우 비슷한 일을해야 할 것입니다.

나중에 별칭이 지정된 클래스에서 get_class()이 필요하면이 라우트가 필요할 수 있습니다. 별칭이 아닌 원래 (정적) 클래스 이름을 제공합니다. 못생긴 eval()/extends 트릭을 사용하면 동적 이름을 얻을 수 있습니다.

+0

굉장합니다. 나는이 기회를주고 답장을 되돌릴 것이다! –

관련 문제