2011-07-28 27 views
2

我有一个非常简单的Php问题。动态PHP子类名

是以下几种可能:

$foo = 'bar'; 
Class $foo extends Object 
{ 
... 
} 

相信任何OOP开发者将有什么我想实现的想法。预先感谢任何提示。

更新:有时你会希望脚本的文件名作为自己的类名(当然,你必须在类名前加上前缀来最小化碰撞)。另外...没有使用eval()。我应该写的代码为:

$cls = 'MyCls' . basename(__FILE__); 
Class $cls extends Object 
{ 
... 
} 
+7

我是OOP开发人员,我不知道你在做什么。你展示的是不可能的。澄清这个问题,我们可以帮助你实现你正在尝试做的任何事情。 – Gordon

+1

@Gordon - 'eval(“class $ foo extends Object {})”;'不是不可能的,但是像地狱一样丑陋。而且我也不知道@Arlene Capili是什么意思。 – Yoshi

+6

我不知道为什么有人会想要动态类名,也许你应该提出你遇到的问题,而不是试图以错误的方式解决问题。 –

回答

0

我不知道你的具体要求是什么,但是,我认为你的方式是错误的。为什么不使用__autolod()来加载你喜欢的类并且你的代码知道如何找到它,而不是试图根据文件名创建类名。

+0

感谢关于自动加载功能的提示。直到今天我都不知道。 –

3

调查class_alias。首先您创建一个具有固定名称的类,并根据需要扩展Object。然后你创建动态别名。

5

,你可以这样做:

// First define the Object class 
class Object 
{ 
} 

// This will be the template class 
$classDef = <<<TEXT 
Class __MY_CLASS_NAME__ extends Object 
{ 
} 
TEXT; 

// This will generate a class based on the given template 
function generateClass($name, $classDef) 
{ 
    eval(str_replace('__MY_CLASS_NAME__', $name, $classDef)); 
} 

// Now use it altogether 
generateClass('Something', $classDef); 
$a = new Something; 
var_dump($a); 

编辑:我与其他人的意见一致..不知道你想要做什么,肯定是丑陋的,但是......你去那里..