变量、函数和类


Variable variables, functions and classes

我最近才发现PHP中的可变变量,不用说,它的用处是巨大的:

$name = "ABC";
$$name = "DEF";
echo ${"ABC"}; //Gives: DEF

这引起了我的思考,这就引出了我的问题:

既然我们可以有可变的名字,我们就不能有可变的函数吗?不是函数名中的'functions',而是(或多或少)像:

$func = 'function test() { echo "Success!"; }';
$func(); //If this would work, it would give: Success!

或者,更好的是变量类:

$class = 'class { function test() { echo "Success!"; } }';
$instance = new $class;
$instance->test(); //In a (not-so) perfect world this would give: Success!

这些都有可能吗?

不用说,它的用处是巨大的

你大错特错了。
可变变量绝对没有什么了不起的。你最好发现数组

PHP也有变量函数名,它更有用,但仍然使阅读你的代码成为一种折磨。所以,最好也避免使用它们。

记住最著名的只写语言的命运。PHP一口气就把它吃掉了,只是因为PHP的可读性。不要试图从PHP中生成Perl。写代码是一件休闲的事情,但是找出代码中的错误却是一项真正的工作。不要让你的工作变得更难。

不要写晦涩难懂的代码。
编写简洁明了的代码。
你会给你自己和其他碰巧使用它的人带来巨大的帮助。

我不知道您的第三个示例,但是您的第二个示例应该几乎可以工作(假设您使用PHP 5.3或更高;))。只留下引号和函数名:

$func = function() { echo "Success!"; };
$func(); //should give: Success!

搜索"匿名函数",或者,要了解更多信息,请查看文档

唯一可行的方法是使用eval

$func = "echo 'Success!';";
eval($func);

你也可以用变量来调用函数

function foo()
{
    echo 'Success';
}
$foo = 'foo';
$foo();

请记住,您正在进入PHP的一个危险区域,因为这通常只会使您的代码对任何将来必须维护您的代码的开发人员(包括您自己)变得模糊。