2011-03-24 50 views
0

例如,$_GET包含id=10, var=100。我怎样才能提取并将它们传递给构造函数public function __construct($id, $var)就像这样new Test(extract($_GET));

+1

你可能想要$ _POST一些被接受的答案。 – 2011-03-24 23:09:34

+0

是的,当您发现它们有帮助/正确时,请接受答案。 此外,你是否想通过关键和价值,或只是价值? – 2011-03-24 23:15:02

回答

0

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

+0

你会如何推荐? – Tuco 2011-03-24 23:12:27

1

我认为你知道你从URL中寻找什么值?

$ _GET in PHP只是一个关联数组。所以,如果我的网址是这样的:

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

我能得到像这样的变量:

​​

小心$ _GET,因为没有安全保障是防止我改变我的网址栏

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

所以你应该总是把它视为不可信。

+0

他希望键和值都传递给构造函数。不只是价值。 – Rasika 2011-03-24 23:12:49

+0

这不是我怎么读这个问题...... – 2011-03-24 23:14:20

0

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

3

使用ReflectionMethodreflection 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存在的所有强制性参数,抛出异常,等等。