自动分配方法参数,如Codeigniter


Automatically assign method arguments like Codeigniter

在Codeigniter中,URI中的参数自动提供给被调用的方法。

例如:

url中的

/admin/edit/news/1意味着在admin控制器中,您可以执行以下操作:

function edit($table,$id)
{
    echo $table; // outputs 'news'
    echo $id; // outputs '1'
}

因此,从本质上讲,您可以在方法中命名和使用参数,而无需先前以该顺序"传递"它们,无论有多少,它们仍然按照它们在URI中出现的顺序传递给函数。

我猜这一定与__call()魔法方法有关,但我无法理解如何将它们传递给被调用的方法,好像它们是单独的参数,而不是__call()方法接收到的$args数组。

这是如何实现的?

您可以在system/core/CodeIgniter.php文件中看到围绕这个魔术的整体逻辑。

你可以看到它是如何实例化类的https://github.com/bcit-ci/CodeIgniter/blob/develop/system/core/CodeIgniter.php L500

并且,我突出显示了调用带参数的方法的那一行。

https://github.com/bcit-ci/CodeIgniter/blob/develop/system/core/CodeIgniter.php L514

[]的