例如,$_GET
包含id=10, var=100
。我怎样才能提取并将它们传递给构造函数public function __construct($id, $var)
就像这样new Test(extract($_GET));
回答
将构造函数更改为__construct($ array);并在construtor中设置你的变量。这不是很漂亮,我不会推荐它,但它会起作用。
你会如何推荐? – Tuco 2011-03-24 23:12:27
我认为你知道你从URL中寻找什么值?
$ _GET in PHP只是一个关联数组。所以,如果我的网址是这样的:
http://example.com/index.php?var1=foo&var2=bar
我能得到像这样的变量:
小心$ _GET,因为没有安全保障是防止我改变我的网址栏
http://example.com/index.php?var1=foo&var2=[malicious code]
所以你应该总是把它视为不可信。
他希望键和值都传递给构造函数。不只是价值。 – Rasika 2011-03-24 23:12:49
这不是我怎么读这个问题...... – 2011-03-24 23:14:20
$_GET
是一个关联数组。因此,您可以从$_GET
获取key以获取变量名称。值很明显$_GET['key']
使用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. 将函数传递给构造函数
- 2. 将构造函数传递给函数
- 3. Java:Spring:如何动态地将params传递给构造函数?
- 4. 将结构传递给构造函数
- 5. 将数据传递给构造函数
- 6. 将参数传递给构造函数
- 7. PHP从数组中提取值并将它们传递给函数
- 8. 将enum传递给构造函数
- 9. 将std :: shared_ptr传递给构造函数
- 10. 将NULL传递给构造函数
- 11. 将事件传递给构造函数
- 12. 将ImageView传递给构造函数
- 13. 将$ _GET变量传递给javascript函数
- 14. 将数组传递给构造函数而不声明它?
- 15. jQuery自定义函数并将参数传递给它们
- 16. 将函数传递给javascript构造函数
- 17. 将所有参数传递给类构造函数并将参数传递给成员函数
- 18. 将函数应用于列表并将其结果传递给构造函数?
- 19. MVC:捕获路由url并将它们传递给javascript函数
- 20. 使用Simple Injector将构造函数传递给构造函数abd WebFormsMVP
- 21. 提取参数,并将它们传递到数据库
- 22. 将文件传递给构造函数以读取
- 23. 将参数从不同的构造函数传递给类构造函数?
- 24. 如何从主构造函数将参数传递给父构造函数?
- 25. 传递给构造函数时出错
- 26. 传递字典给构造函数?
- 27. 将结构传递给一个函数并分配它
- 28. 将对象函数传递给对象构造函数
- 29. 将函数指针传递给构造函数C++
- 30. 如何将函数传递给构造函数
你可能想要$ _POST一些被接受的答案。 – 2011-03-24 23:09:34
是的,当您发现它们有帮助/正确时,请接受答案。 此外,你是否想通过关键和价值,或只是价值? – 2011-03-24 23:15:02