提取$ _GET / $ _ POST参数并将它们传递给构造函数

时间:2011-03-24 23:05:06

标签: php

例如,$_GET包含id=10, var=100。如何提取并将它们传递给构造函数public function __construct($id, $var)new Test(extract($_GET));

这样的东西

4 个答案:

答案 0 :(得分:3)

使用ReflectionMethod中的reflection API来检查__construct()方法的签名是什么。

class MyClass {
        public function __construct($id, $title, $slug = null) {
                var_dump($id, $title, $slug);
        }
}

$object = new MyClass();

$method = new ReflectionMethod($object, '__construct');
$parameters = $method->getParameters();

$parameters包含一组ReflectionParameter个对象。

现在您需要准备一组将由ReflectionMethod::invokeArgs()使用的参数:

$invokeParameters = array();

foreach ($parameters as $parameter) {
    $value = $_REQUEST[$parameter->getName()]; 

    $invokeParameters[$parameter->getPosition()] = $value;
}

$method->invokeArgs($object, $invokeParameters);

当然,您应该添加一些条件来检查$_REQUEST中是否存在所有必需参数,如果不存在则抛出异常,等等。

答案 1 :(得分:1)

我假设您知道从网址中寻找什么值?

PHP中的

$ _ GET只是一个关联数组。所以如果我的网址看起来像这样:

http://example.com/index.php?var1=foo&var2=bar

我可以得到这样的变量:

new Test($_GET['var1'], $_GET['var2']);

小心使用$ _GET,因为没有任何安全措施阻止我将URL栏更改为

    http://example.com/index.php?var1=foo&var2=[malicious code]

因此,您应该始终将其视为不受信任。

答案 2 :(得分:0)

将构造函数更改为__construct($ array);并在construtor中设置变量。它不漂亮,我不会推荐它,但它会起作用。

答案 3 :(得分:0)

$_GET是一个关联数组。因此,您可以从$_GET获取key以获取变量名称。该值显然是$_GET['key']