我希望能够按照这个
的顺序做点什么$name = "Hello".time().mt_rand();
class $name {
function hellolol() {
echo "LOL";
}
}
$name::hellolol();
这样我就可以在PHP中构建一个可重载模块系统。这是否可能,如果是这样,我将如何做这样的事情?
编辑:我已经把它变成了一个基本上完成了接受的答案所建议的项目。这是一个链接:https://github.com/Modfwango/Modfwango
答案 0 :(得分:3)
这在技术上是可能的,只是非常非常糟糕。
首先,保存此文件:
<?php
// GeneratedClass.php
class CLASSNAME {
function hellolol(){
echo "LOL";
}
}
然后,使用以下命令创建具有自定义名称的类:
<?php
function generate_class($name){
eval('?>'.str_replace('CLASSNAME', $name, file_get_contents('GeneratedClass.php')));
}
generate_class("Hello".time().mt_rand());
同样,这是不是一个好主意!除了与eval
有关的事实可能是一个坏主意,通过手动解析这些类,你将失去任何IDE会给你带来的好处,文件不会像memcached那样被缓存,而且它只是一个噩梦。但这是可能的。
答案 1 :(得分:2)
$name = "Hello".time().mt_rand();
eval(sprintf('
class %s {
static function hellolol() {
echo "LOL";
}
}', $name));
$name::hellolol();
非常讨厌但很适合嘲笑等等。