在PHP中定义一个带有变量名的类?

时间:2012-11-22 02:04:04

标签: php class variables dynamic

我希望能够按照这个

的顺序做点什么
$name = "Hello".time().mt_rand();
class $name {
    function hellolol() {
        echo "LOL";
    }
}
$name::hellolol();

这样我就可以在PHP中构建一个可重载模块系统。这是否可能,如果是这样,我将如何做这样的事情?

编辑:我已经把它变成了一个基本上完成了接受的答案所建议的项目。这是一个链接:https://github.com/Modfwango/Modfwango

2 个答案:

答案 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();

非常讨厌但很适合嘲笑等等。