如何使用变量名称声明一个 PHP 类

6

在PHP中是否有一种方法
可以使用变量声明一个类
即(以下代码无法工作,但是这里是为了让你了解我的意图):

$myname = "the_class";
class $myname {
 ...
}

我也尝试了以下方法:
define("MYNAME","the_class");
class MYNAME{
 ...
}

我尝试了:

$myname = "the_class";
class $$myname {
 ...
}

这并不是很有用:
http://php.net/manual/zh/language.variables.scope.php

这也不是:
http://php.net/manual/zh/reserved.keywords.class.php

非常感谢您的帮助。


12
你为什么想要那样做? - NullUserException
也许如果您告诉我们您计划如何使用它,我们可能会找到更好的方法来实现您的最终目标。我无法想象为什么需要这样做... - Dan
看起来你将$myname定义为字符串,而不是类。一个变量可以指向两个对象吗?这就像一个(数学)函数1x -> 2ys。 - Michael Jasper
6
我很厌倦这些疯狂的踩票者,他们甚至不能费心解释自己的想法。这个问题是合理的。如果你不同意提问者的做法... 只需回答问题,然后提供一个替代方案。至于为什么要这样做... 嗯,它有它的用途。 - Fake Code Monkey Rashid
1
同意@Fake Code Monkey Rashid的观点。根据他的逻辑,我可以推断出一个有效的情况是,如果他正在尝试模拟或存根某些内容。也许他正在编写测试套件?他的问题清晰明了,甚至“展示了他的工作”并附有研究笔记...在我看来不应该被踩。 - Mike B
备选答案在重复问题中:http://stackoverflow.com/questions/12230252/creating-a-class-name-from-a-variable/12230281#12230281 - Eugen Rieck
2个回答

7
当然,可以使用php编写文件并命名,然后要求该文件。您也可以使用eval,例如: eval("class $myname { ... };"); 对于更复杂的情况,请使用类库,例如Zend的CodeGenerator(示例在这里)。

0
请不要对此回答进行投票或标记为答案。 Eugen Rieck的回答是最好的,但被淹没在评论中了。 他链接到的答案展示了如何使用class_alias()将类命名为一个定义。如果您正在编写一个库类并希望让用户随意命名它,例如通过在配置文件中设置一个定义,这将非常有用。
因此,如果您正在编写包含MyLibraryClass的库,您可以让用户将其命名为像LC这样的缩写,以便他们可以编写LC::someFunction()或LC->someFunction而不必完全写出整个名称。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接