0

我希望能够按照这个顺序做一些事情

$name = "Hello".time().mt_rand();
class $name {
    function hellolol() {
        echo "LOL";
    }
}
$name::hellolol();

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

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

4

2 回答 2

3
$name = "Hello".time().mt_rand();
eval(sprintf('
class %s {
    static function hellolol() {
        echo "LOL";
    }
}', $name));
$name::hellolol();

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

于 2012-11-22T02:12:22.253 回答
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 之类的东西缓存,而且它完全是一个噩梦使用。但这是可能的。

于 2012-11-22T02:14:28.193 回答