2017-04-23 5 views
1

나는 Eventbrite API에 연결할 라이브러리에서 일하고 있습니다. 필자는 제 2 수준의 많은 비즈니스 객체가 빈 클래스라는 점을 충분히 일반화 시켰습니다. 그런 말로하면, 내가 그 객체들을 인스턴스화 할 때, 나는 여전히 그들이 다른 클래스로 등록하기를 원할 것이다. 나는 class_alias 가야 할 길일 것이라고 생각했지만 원래 클래스는 var_dump을 수행 할 때 반환되는 것으로 보입니다.해당 클래스로 var_dump 함께 PHP class_alias

현재 : 난 정말 또한 새로운 동적으로 생성 된 클래스를하면서 일반적인 하나의 찬성 빈 클래스를 삭제하려면

$attendee = new Attendee(); 
var_dump($attendee); 
// Attendee {} 

: 내가 무엇을 촬영하고있어

<?php 

namespace Project; 

class_alias(
    '\\Project\\Classes\\Aliaser', 
    '\\Project\\Classes\\Attendee', 
    true 
); 

use Project\Classes\Aliaser; 
use Project\Classes\Attendee; 

$attendee = new Attendee(); 
var_dump($attendee) 
// Aliaser {} 

등록되어 있어야합니다.

심각한 성능 저하없이 가능합니까?

참고 : PHP 5.4 이상을 권장하지만 PHP 7도 좋습니다.

당신은 eval을 사용하여 파일에 코드를 퍼 팅하지 않고 클래스의 인스턴스를 만들 수 있습니다
+0

왜 그게 좋을까요? –

+1

@ ConstantinGALBENU : "GenericClass"는 "SpecicClass"만큼 개발자에게 도움이되지 못하기 때문에 "GenericClass"를 상속하고 실제로 기능을 확장하거나 재정의하지 않는 클래스를 혼란스럽게합니다. –

+0

문제를 이해하려고하는데 실패합니다. "특수 수업"이 필요하지만 원하는 것은 아닙니다. 혼란 스럽네요. –

답변

0

:

// define the class if it does not exists 
if (!class_exists (\Eightfold\Eventbrite\Classes\ApiResource\Question::class)) { 
    eval ('class Question extends \Eightfold\Eventbrite\Classes\ApiResource {} '); 
} 

//create instance 
$instance = new \Eightfold\Eventbrite\Classes\ApiResource\Question(); 

P.S.을 당신이 eval없이 다른 해결책을 찾을 수없는 경우에 당신이 견적을 고려해야합니다

평가()가 대답하는 경우, 당신은 거의 확실히 잘못된 질문을하고 있습니다. - Rasmus Lerdorf, BDFL of PHP

+0

흠 ... 성능 저하가 있기 때문에 투표를 내려라. ?? ?? –

+0

나는 이해하지 못한다. 실제로 클래스를 포함하는 파일을 만들지 않고 클래스를 만드는 다른 솔루션을 알고 있습니까? –

+0

나쁠 수있는 유일한 것은 클래스가 이미 존재할 수 있다는 것입니다. 따라서 응답을 업데이트했습니다 –