假设我用这样的方法定义类:
class Test {
public function doStuff($a, $b, $c) {
// -- Do stuff --
}
}
是否可以使用此方法但参数顺序不同,如下所示:
$test = new Test();
$test->doStuff($b, $c, $a);
他们会有相同的名字,只是顺序不同。
我看到 Symfony2 可以用它的调度器来做,你可以按照你想要的任何顺序使用参数。 链接:Symfony2 controller can do it
问题是,如何让它发挥作用? Symfony2 如何调用适当的 Action Controller ,然后它可以按照您喜欢的任何顺序接受参数?
编辑: 我不能使用数组,而且我知道 php 不使用命名参数。但 Symfony2 以某种方式设法做到了。
最佳答案
我认为您误解了 Symfony 的意思。您不能以任何顺序将参数传递给 Controller 操作,它必须按特定顺序。然而,他们正在做的是动态的,是弄清楚您的路由参数在函数定义中的顺序。
比如我们定义一个路由:
pattern: /hello/{first_name}/{last_name}
defaults: { _controller: AcmeHelloBundle:Hello:index, color: green }
在路由中,参数被命名为first_name
、last_name
和color
。
他们的意思是,您对操作中的参数使用什么顺序并不重要。
以下每一个都是等价的:
public function indexAction($first_name, $last_name, $color) {...}
public function indexAction($color, $last_name, $first_name) {...}
public function indexAction($last_name, $color, $first_name) {...}
由于您的参数与路由中的参数同名,Symfony 根据您的定义确定参数的正确顺序。
如果您要手动调用以下操作:
public function indexAction($first_name, $last_name, $color)
那么参数仍然必须以$first_name, $last_name, $color
的形式传递,而不是以任何其他顺序传递。使用不同的顺序只会将错误的值与参数相关联。 Symfony 不关心你定义函数的顺序,因为它决定了顺序,因为你的路由参数必须与你的方法参数命名相同。
希望这能消除困惑。
关于php - 如何以任意顺序使用 PHP 函数或方法参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12981679/