2017-04-23 4 views
1

私はEventbrite APIに接続するためのライブラリを作成しています。私は、第2レベルのビジネスオブジェクトの多くが空のクラスであることを十分に一般化しました。私がそれらのオブジェクトをインスタンス化するとき、私はまだそれらが異なるクラスとして登録したいと思います。私はclass_aliasが行く方法だと思ったが、元のクラスはvar_dumpを実行したときに返されるものと思われる。そのクラスとしてvar_dumpを持つPHP class_alias

電流:私は本当に、新しい動的に生成されたクラスを持ちながら、一般的な1の賛成で、空のクラスを削除したい

$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も良いです。

+0

なぜあなたはそれをしたいですか? –

+1

@ ConstantinGALBENU: "GenericClass"は "SpecicClass"のように開発者にとっては役に立たないが、 "GenericClass"を継承し、実際に機能を拡張またはオーバーライドしないクラスの束を混同することも紛らわしい。 –

+0

あなたの問題を理解しようとしていますが、失敗します。あなたは "特別なクラス"が必要ですが、あなたはそれらを望んでいません。それはあなたがそう私はあなたがサブタイプを持っていないAPIからオブジェクトを受け取る表示されるものとソリューション –

答えて

0

あなたはevalを使用してファイルにコードをputingせずにクラスのインスタンスを作成することができます。

// 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せず、別の解決策が見つからないなら、あなたはこの引用を検討する必要があります。

のeval()が答えであるならば、あなたはほぼ確実に間違った 質問を求めています。 - ラスマス・ラードフ、PHP

のBDFL
+0

Hmmmm ...パフォーマンスが低下したためです –

+0

私は分かりません。実際にクラスを含むファイルを作成せずにクラスを作成するための他の解決策をご存知ですか? –

+0

悪いかもしれないのは、クラスがすでに存在する可能性があるということだけです。回答を更新しました –

関連する問題