3

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

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

我说的是

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

我试图理解这个博客http://r.je/mvc-in-php.html上的 mvc 模式,但如果我能理解这个语法技巧,它真的对我有帮助......

谢谢

4

4 回答 4

4

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

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

相当于:

$object->test

在您的示例中,$_GET['action']有人action$controller.

请参阅手册中的变量变量变量函数

于 2013-11-08T21:22:26.797 回答
3

啊。那是丑陋的代码。就像非常丑陋的代码一样。

所以你有一个对象$controller,他们$_GET['action']用来调用里面的一个方法$controller。所以说你有page.php?action=call。这将与调用相同

$controller->call();

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

于 2013-11-08T21:23:50.617 回答
1

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

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

最终将等同于拥有

$controller->whatever();

在代码中。

于 2013-11-08T21:23:01.593 回答
0

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

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

于 2013-11-08T22:09:16.550 回答