{$ _GET [ '动作']}();这些括号是什么意思?

时间:2013-11-08 21:20:38

标签: php braces

有人可以帮助理解php中的这种语法技巧:

enter $controller->{$_GET['action']}();

我在谈论

{$_GET['action']}();

我正在尝试了解此博客http://r.je/mvc-in-php.html上的mvc模式,但如果我能理解这种语法技巧,它真的很有帮助......

由于

4 个答案:

答案 0 :(得分:3)

这是一种动态访问对象成员的方法。

$key = 'test';
$object->{$key}

相当于:

$object->test

在您的示例中,某人正在运行$_GET['action']action(查询字符串中的$controller变量)指定的任何方法。

请参阅手册中的variable variablesvariable functions

答案 1 :(得分:3)

唉。这是丑陋的代码。就像真正难看的代码一样。

所以你有一个对象$controller,他们正在使用$_GET['action']来调用$controller内的方法。所以说你有page.php?action=call。它与调用

相同
$controller->call();

这是一个非常糟糕的主意。您不应该接受原始的不受信任的数据来执行代码。那里有大量的安全漏洞。

答案 2 :(得分:1)

它接受通过action查询参数传入的任何字符串,并尝试将其作为函数执行。 e.g。

http://example.com/index.php?action=whatever

最终将等同于

$controller->whatever();
代码中的

答案 3 :(得分:0)

非常感谢你的帮助。所以当我这样做时: $controller->{$_GET ['action']} ();

我正在动态访问对象的成员。在这种情况下,它是控制器。在本教程中,已调用的方法是“textclicked”。所以这就是那里的行代码。非常感谢你的帮助。这对我很有帮助