例如,$_GET
包含id=10, var=100
。如何提取并将它们传递给构造函数public function __construct($id, $var)
像new Test(extract($_GET));
答案 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']